您的位置:首页 > 其它

无法从 CONST CHAR 转换为 LPCWSTR

2012-03-15 11:12 260 查看
CString ——〉char *

CString mystring = "abcde";

char* szmystring = (char *)(LPCTSTR)mystring;

char * ——〉CString

char* mystring = "12345";

CString string = mystring;

char* pBuffer =new char[1024];

CString strBuf = "test";

pBuffer = strBuf.GetBuffer(sizeof(pBuffer));

//wchar_t和WCHAR相同

typedef wchar_t WCHAR;

//对于LPCTSTR根据以下的定义,实际就是说

//LPCTSTR就是const wchar_t *或者const WCHAR *

typedef LPCWSTR PCTSTR, LPCTSTR;

typedef __nullterminated CONST WCHAR *LPCWSTR, *PCWSTR;

BOOL实际为int类型:

typedef int BOOL;

应用举例:

CREATESTRUCT结构中的

LPCTSTR lpszName 这个标题字符串是LPCTSTR类型,在Unicode编码下,直接使用

cs.lpszName = "a" 会直接error C2440: “=”: 无法从“const char [2]”转换为“LPCWSTR”

很明显,上述lpszName被定义为LPCWSTR,即WCHAR *,因此可以使用

cs.lpszName = (WCHAR *)"aAA";

可惜虽然不会有编译错误的提示,但是显示乱码,原因在于wchar_t定义的是宽字符集,因此要如下定义:

cs.lpszName = (WCHAR *)_T("aAA");

好,这样就通过了!

这里需要注意,如果使用:

CString str_cap("haha");

cs.lpszName = (const WCHAR *)(str_cap);

虽然可以编译过去,但是仍然是乱码,原因是CString没有转宽字符集,方法调用CString::AllocSysString(),注意_T()是不行的!

具体代码:

CString str_cap("haha");

cs.lpszName = (const WCHAR *)(str_cap.AllocSysString());

//cs.lpszName = (LPCTSTR)(str_cap.AllocSysString()); 同上面效果相同
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: