TCHAR、_T与_TEXT

这篇博客介绍了在Visual C++中如何处理Unicode和ANSI编码的问题,主要关注TCHAR、_T和_TEXT这三个宏的使用。TCHAR会根据是否定义UNICODE宏来选择是char还是wchar_t类型。_T宏和_TEXT宏则用于字符串字面量,根据UNICODE的定义状态转换为对应的Unicode或ANSI形式。文章强调了在项目设置中选择字符集的重要性,并推荐了一种编写兼容性良好的代码方式。
摘要由CSDN通过智能技术生成

计算机最初使用的不是UNICODE,最初的系统和程序都采用的是ANSI或者MBCS,那么,问题来了:我们开发程序的时候,是采用char还是wchar_t?观察如下代码:

 
 
 
  1. char msg[] = "学习C++"

当我们准备采用wchar_t时,则需要改成:

 
 
 
  1. wchar_t msg[] = L"学习C++"

太麻烦了!幸运的是,Visual C++的开发者预知到了这样的麻烦,他们从而为此造出了一批宏,这些宏看起来乱七八糟的,但是确实解决了我们的问题,且看一段代码:

 
 
 
  1. TCHAR msg[] = _T("学习C++"); 

这段代码中,msg到底是char数组还是wchar_t数组呢?Visual C++的解释是,如果需要它是char数组,那么它就是char数组;否则,它就是wchar_t数组。这样的魅力来源于宏TCHAR的定义:

 
 
 
  1. typedef   unsigned   char   
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
void Program_dynamic1(char* ip,int port,LPCWSTR str) { unsigned long playlist = create_playlist(64, 32,8536); cout<<"create_playlist:"<<playlist<<endl; unsigned long program = create_program(L"program_1",_TEXT_T("0xff000000")); cout<<"create_program:"<<program<<endl; int dynamic_type = 1; int display_effects = 52; int display_speed = 10; int stay_time = 0; int gif_flag = 0; LPCWSTR bg_color = L"0xff000000"; LPCWSTR color = L"0xffff0000"; LPCWSTR font_attributes = L"normal"; LPCWSTR font = L"SimSun"; LPCWSTR align_h = L"0"; LPCWSTR align_v = L"0"; LPCWSTR ff=L"1.txt"; TCHAR szFilePath[MAX_PATH + 1]={0}; GetModuleFileName(NULL, szFilePath, MAX_PATH); (_tcsrchr(szFilePath, L'\\'))[1] = 0; LPCWSTR f = wcscat(szFilePath,ff); unsigned long dynamic_area = create_dynamic(); cout<<"create_dynamic:"<<dynamic_area<<endl; int err = add_dynamic_unit(dynamic_area, dynamic_type, display_effects, display_speed, stay_time, _TEXT_T("1.txt"), gif_flag, bg_color, 12, font, color, font_attributes, align_h, align_v, 0, 0, 0,_TEXT_T(""),_TEXT_T("")); err = add_dynamic_unit(dynamic_area, 0, display_effects, display_speed, stay_time, _TEXT_T("1.bmp"), gif_flag, bg_color, 12, font, color, font_attributes, _TEXT_T("0"), _TEXT_T("0"), 0, 0, 0,_TEXT_T(""),_TEXT_T("")); cout<<"add_dynamic_unit:"<<err<<endl; err = add_dynamic(program, dynamic_area,0, 0, 0, 64, 32, L"", 0, L"", 100); cout<<"add_dynamic:"<<err<<endl; delete_dynamic(dynamic_area); LPCWSTR m_aging_start_time = _T("2018-12-01"); LPCWSTR m_aging_stop_time = _T("2018-12-30"); LPCWSTR m_period_ontime = _T("15:14:00"); LPCWSTR m_period_offtime = _T("15:15:00"); err = add_program_in_playlist(playlist, program, 0, 10, m_aging_start_time, m_aging_stop_time, m_period_ontime, m_period_offtime, 127); cout<<"add_program_in_playlist:"<<err<<endl; err = update_dynamic(ip, port, _TEXT_T("guest"), _TEXT_T("guest"), playlist, _TEXT_T(""), 1, 0); cout<<"update_dynamic:"<<err<<endl; cancel_send_program(playlist); delete_playlist(playlist); }
最新发布
07-16
这段代码是一个C++函数,名为Program_dynamic1。它的作用是创建一个动态节目,并将其添加到播放列表中,然后通过网络更新动态节目。 函数中主要的步骤包括: 1. 调用create_playlist函数创建一个播放列表,返回一个unsigned long类型的值,表示播放列表的ID。 2. 调用create_program函数创建一个节目,其中包括节目名称和背景颜色。 3. 设置一些动态特效的参数,如动态类型、显示特效、显示速度、停留时间等。 4. 调用create_dynamic函数创建一个动态区域,返回一个unsigned long类型的值,表示动态区域的ID。 5. 调用add_dynamic_unit函数向动态区域中添加动态单元,包括一些参数如动态类型、显示特效、显示速度、文件路径等。 6. 调用add_dynamic函数将动态区域添加到节目中。 7. 调用delete_dynamic函数删除动态区域。 8. 设置一些节目的播放时间参数,如开始日期、结束日期、起止时间等。 9. 调用add_program_in_playlist函数将节目添加到播放列表中。 10. 调用update_dynamic函数通过网络更新动态节目。 11. 调用cancel_send_program函数取消发送节目。 12. 调用delete_playlist函数删除播放列表。 以上就是函数Program_dynamic1的主要流程和功能。请注意,该代码中使用了一些Windows特定的函数和数据类型,如LPCWSTR、TCHAR等,这些是为了支持Unicode字符集和跨平台兼容性而定义的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值