2012-05-09 95 views

回答

5

其实__T用于打开字符串为wchar_t *或字符*,在TCHAR.H您有:

#define __T(x)  L ## x 

当启用UNICODE使用和

#define __T(x)  x 

当禁用

如果你的代码是要在Unicode和非UNICODE编译编译使用:

TCHAR * SZ = __T(“我的文字”);

最WINAPI函数使用TCHAR *或一些形式的

其实我更喜欢_T()版本,从来不知道__T版本存在,在TCHAR.H的底部,你把它定义为:

#define _T(x)  __T(x) 
#define _TEXT(x) __T(x) 

所以回到你的例子:

strcpy(codecName, __T(#CODEC)); \ 

等同于:

strcpy(codecName, "CODEC"); \ 

非Unicode构建和

strcpy(codecName, L"CODEC"); \ 

上UNICODE建立

非常重要!!:使用_T或__T是不是真的足够,以确保您的代码是UNICODE compilant。这将使调用WINAPI函数更容易。你必须准备好你的代码来工作UNICODE。

+0

重要说明:此头(和宏)特定于Windows,因为它不使用UTF-8作为Unicode。 –

+0

这不完全正确。首先,当然,'char'文本能够成为Unicode:认为UTF-8。其次,只是改变一个宏并不会使你的代码符合Unicode;不仅仅是字符类型是16位还是只有8位。“TCHAR”这样的东西实际上是一种欺诈行为:虚假广告,因为它们无法提供他们承诺的东西。 –

+0

这就是你如何在Windows,Windows-CE下使用visual-C++编码(仅适用于UNICODE)。没有UTF-8,winapi函数接受char(你必须注意编码)或wchar_t(2bytes UNICODE)。问题有一个标签visual-C++,所以我想MS特定的答案是可以的。我认为这是显而易见的,但我添加了评论__T不会将您的应用程序变成unicode兼容代码:) – marcinj

相关问题