char *无法转换为LPCWSTR问题

解决方法1:修改工程属性,项目属性->高级->字符集->使用Unicode字符集改为未设置。
解决方法2:处理字符串类型,将char类型的数组改为TCHAR,在字符串赋值给LPCWSTR前加L,或TEXT。

在网上查找资料时,遇到一些老一些的代码在如今的VS2017或者2019上经常会遇到这样的问题,其本质原因是微软对字符集版本的支持变化,过去微软只遵从ANSI标准,随着字符集的变化,为了兼容性,微软如今支持ANSI和Unicode两种格式字符,且vs2005以后编码方式默认为Unicode,部分函数默认调用Unicode方式(函数名+W,exp:MessageBox+W=MessageBoxW),而非ANSI方式(函数名+A,exp:MessageBox+A=MessageBoxA),所以过去编译成功的代码如今可能会出现一些问题。

TCHAR、char

因为C++支持两种字符串,即常规的ANSI编码(使用"“包裹)和Unicode编码(使用L”“包裹),这样对应的就有了两套字符串处理函数,比如:strlen和wcslen,分别用于处理两种字符串。
微软将这两套字符集及其操作进行了统一,通过条件编译(通过_UNICODE和UNICODE宏)控制实际使用的字符集,这样就有了_T(”")这样的字符串,对应的就有了_tcslen这样的函数。
为了存储这样的通用字符,就有了TCHAR:
当没有定义_UNICODE宏时,TCHAR = char,_tcslen =strlen
当定义了_UNICODE宏时,TCHAR = wchar_t , _tcslen = wcslen
当我们定义了UNICODE宏,就相当于告诉了编译器:我准备采用UNICODE版本。这个时候,TCHAR就会摇身一变,变成了wchar_t。而未定义UNICODE宏时,TCHAR摇身一变,变成了unsignedchar。这样就可以很好的切换宽窄字符集。
tchar可用于双字节字符串,使程序可以用于中日韩等国 语言文字处理、显示。使编程方法简化。

C++编程直观理解如下:

#include
#include
using namespace std;
int main() {
	TCHAR a = 'a';
	char b = 'b';
	cout << sizeof(a) << endl << sizeof(b)<

输出结果:
char *无法转换为LPCWSTR问题_第1张图片
可以直观看出TCHAR类型即较长的char类型。

LPCWSTR

LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。

你可能感兴趣的:(开发)