问您一下如果使用Use Unicode Character Set

来源:百度知道 编辑:UC知道 时间:2024/09/22 14:20:41
那么send(sockClient,"This is lisi",strlen("This is lisi")+1,0);为什么能够通过编译啊 不要加_T宏
我就是想知道在使用Unicode字符集的时候,什么时候要在字符串前面加_T这个宏

int send(
SOCKET s,
const char FAR* buf,
int len,
int flags
);
send函数所需传递参数本身就是char *,并不是TCHAR *,所以,你上面那样写当然是正确的~
我觉得是否用_T得看你所调用的函数接受什么类型的参数

_T宏的作用:
如果没有定义Unicode字符集,使用_T宏则解释为8位的字符字符串,如果定义了Unicode字符集,使用_T宏则解释为宽字符的组合。

如果你没有使用Unicode字符集
__T(x) 表示 x
_tcslen 表示 strlen
TCHAR 表示 char
...

如果你使用了Unicode字符集
__T(x) 表示 L##x 例如__T("This is lisi")就是L"This is lisi"
_tcslen 表示 wcslen
TCHAR 表示 wchar_t
...

_T宏用于国际化。

例如int i=_tcslen(_T("你好"));
如果定义了UNICODE,i等于2,没有定义UNICODE,i等于4。

如果函数是ANSI版本的,则不应加_T,否则为UNICODE版本的,则应加_T
大多数API函数和MFC函数,只要声明了UNICODE模式,则都默认为UNICODE版本出现。这个原因很简单

#if define _UNICODE
#define TextOut TextOutW
#else
#define TextOut TextOutA
#endif

这样,只要声明了UNICODE,那么 TextOut 就等于是 TextOutW了。但这并不是说 TextOutA 不能用, 也可以用的,但用的时候就不能加_T了,因为它是ANSI版本的。