转自: http://blog.csdn.net/dingdangbears/archive/2009/03/05/3956147.aspx
原来c++内置wchar_t。
这就好比下面的代码:
short sh;
unsigned short ush;
ush = sh; //ok
short* pShort;
unsigned short* pChar;
pShort = pChar;// illegal
long l;
unsigned long ul;
ul = l; //ok
long *pL;
unsigned long *pul;
pL = pul;// illegal
short可以隐式转换为unsigned short, 而short*不可以隐式转换为unsigned short*;
long可以隐式转换为unsigned long, 而long*不可以隐式转换为unsigned long*;
同理:TCHAR(wchar_t)可以隐式转换为XChar(unsigned short), 而TCHAR*(wchar_t*)不可以隐式转换为XChar*(unsigned short*)。
解决方案:
1,设置Property --> C/C++ --> language --> Treat wchar_t as Build-in Type为NO. wchar_t不是内置的了,而是typedef unsigned short wchar_t。
2,用reinterpret_cast
3,改typedef unsigned short XChar 为 typedef wchar_t XChar。