不能从const char *转换为LPCWSTR
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不能从const char *转换为LPCWSTR相关的知识,希望对你有一定的参考价值。
编译器有时候会根据编码方式来选择定义为LPCWSTR还是LPCTSTR
LPSTR: 32bit指针 指向一个字符串,每个字符占1字节。 相当于 char *
LPCSTR: 32-bit指针 指向一个常字符串,每个字符占1字节。 相当于 const char *
LPTSTR: 32-bit指针 每字符可能占1字节或2字节,取决于Unicode是否定义
LPCTSTR:32-bit指针 指向一个常字符串,每字符可能占1字节或2字节,取决于Unicode是否定义
LPWSTR: 32-bit指针,指向一个unicode字符串的指针,每个字符占2字节。
LPCWSTR:32-bit指针, 指向一个unicode字符串常量的指针,每个字符占2字节。
在上面的类型中,L表示long, P表示指针,C表示constant, T表示指针指向的字符占的字节数取决于Unicode是否定义,W表示wide,STR就是string的意思。
Windows使用两种字符集ANSI和Unicode,前者在处理英文字符时使用单字节方式,在处理中文字符时使用双字节方式。后者不管是英文字符还是中文字符都是采用双字节方式表示。
解决方法
1、进行强制转换
如使用MessageBox(hwnd,"TEST",NULL,0)就会报错,如果使用强制转换(LPCWSTR)"TEST",虽然能够通过,但是编码会出错。
可行的办法是使用 _T("TEST")转换,或者TEXT("TEST" )都可以
MessageBox(hwnd,TEXT("TEST"),NULL,0);
MessageBox(hwnd,_T("TEST"),NULL,0);
或者 强制使用ANSI字符 MessageBoxA(hwnd,"TEST",NULL,0);
2、更改编码格式
项目菜单——项目属性(最后一个)——配置属性——常规——项目默认值——字符集,将使用Unicode字符集改为未设置即可。
以上是关于不能从const char *转换为LPCWSTR的主要内容,如果未能解决你的问题,请参考以下文章
error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”
error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”
error C2664: “CreateFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”