我们在用VS2012,VS2013编译自己或者网上的源代码时会提示如下错误“LPWSTR类型的实参与const.char类型形参不兼容”,如果我们在VC6.0上运行时不会提示这个错误的。主要原因是VC6默认使用字符ANSI编码方式而VS2012、VS2013默认使用UNICODE编码方式。它们对一些字符所占内存空间的位数不同,为了向下兼容,可以在VS中通过修改一项设置来完成。
1. 右击项目文件,选择属性,【配置属性】-【常规】-【字符集】
更改字符集为:使用多字节字符集
单击确定即可,再次编译,此类错误就不会出现了。
LPCWSTR=const wechar_t*
为了满足程序代码的国际化需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符串中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。
LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据时16位的wchar_t而不是char.
ANSI操作函数以str开头,如strcpy(), strcat(), strlen();
Unicode操作函数以wcs开头,如wcscpy, wcscpy(), wcslen();
VS默认采用宽字符UNICODE编码方式,定义了Unicode,因此相关的字符串必须为unicode字符串,而非ascii字符串,LPCWSTR中的W是块子符的意思,是Unicode,就是说不是传统的char这种单字节字符,而是一个字符占两字节。
配置属性-【C/C++】-【预处理器】-【预处理器定义】
看看有没有UNICODE/_UNICODE,有的话就去掉,