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<iostream>
#include<Windows.h>
using namespace std;
int main() {TCHAR a = 'a';char b = 'b';cout << sizeof(a) << endl << sizeof(b)<<endl;}
输出结果:
可以直观看出TCHAR类型即较长的char类型。
LPCWSTR
LPCWSTR是一个指向unicode编码字符串的32位指针,所指向字符串是wchar型,而不是char型。
char *无法转换为LPCWSTR问题相关推荐
- VS2010 不能将参数 2 从“char [20]”转换为“LPCWSTR”的错误解决
1.VS2010报错 1>d:\users\yangtse\documents\visual studio 20010\projects\winmain\winmain\54.cpp(27) : ...
- C++ Error C2664:无法将参数 1 从“const char [9]”转换为“LPCWSTR”解决方案
C++ Error C2664:无法将参数 1 从"const char [9]"转换为"LPCWSTR"解决方案 参考文章: (1)C++ Error C26 ...
- VC2010 [转]解决char *无法转换为LPCWSTR问题
本文转自:http://blog.csdn.net/sennyrong/article/details/6975603 过去微软只遵循ANSI标准,而现在为了兼容.跨平台,从VS2005后,微软工程默 ...
- MFC中关于char[]转换成LPCWSTR的问题
在写Win32应用程序时候,你可能遭遇到如下错误 : error C2664: 'LoadImageW' : cannot convert parameter 2 from 'char [20]' t ...
- 不能将参数 2 从“const char *”转换为“LPCWSTR”【转】http://blog.sina.com.cn/s/blog_4a94a0db0100ktxp.html...
: 不能将参数 2 从"const char *"转换为"LPCWSTR" 在VS2008下使用MFC编程遇到错误: error C2664: & ...
- 不能从const char *转换为LPCWSTR --VS经常碰到
不能从const char *转换为LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005.vs2008.vs2010中常会出现类型错误. 经常出现的错误是:不能从const ch ...
- 无法从“const char [10]”转换为“char *”
无法从"const char [10]"转换为"char *" 解决方法: 项目属性 c++--> 语言--> 符合模式->> 选择 ...
- [error] MFC错误不能将参数1从const char [3]转换为const wchar_t *
在做项目中经常遇到很多错误,这里我仅仅把自己遇到的一些错误和解决方法写出,供自己和大家查看. 代码如下: CRect rect; GetClientRect(&rect); CString s ...
- error记录 | 不能将参数 1 从“const char [5]”转换为“LPCTSTR
Windows使用两种字符集ANSI和UNICODE,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况.而后者是双字节方式,方便处理双字节字符.Wind ...
最新文章
- formRef=React.createRef() this.formRef.current为null
- 宜信开源|数据库审核软件Themis的规则解析与部署攻略
- sql语句中 时间数值转换为时间格式函数
- 题目1104:整除问题
- 菜鸟春招启动:面向全球毕业生开放八类岗位 超8成是物流运营人员
- 逆天语言模型GPT-2最新开源:345M预训练模型和1.5B参数都来了
- Java 并发编程 --- ThreadPoolExecutor(五)
- 麦克风阵列能干这么多事你知道吗?
- VM两个虚拟机之间的通讯测试
- paip.提升用户检验--------取回密码-忘记密码提醒
- 详解什么是BT种子、迅雷下载链接、磁力链接
- 特殊IP地址分类:私有地址、保留地址
- r语言 聚类求和_R语言聚类分析(示例代码)
- zotero word 调整样式 上标
- 微信小程序实现全局登陆状态
- 如何将QQ群文件快速下载,怎么快速下载QQ中的文件,QQ群文件下载
- 墨哥视角,微软大八系,能大发么?(一)——surface
- Composer中的ThingWorx模型定义—建模
- [翻译练习] Node interview of ElemeFE OS
- 怎么关闭Windows7显示器校准?
热门文章
- java除法保留n位有效位
- Ti的C28x系列的DSP(28069)(28377)使用经验,ADC经验
- Mac开机后键盘和触控板失灵
- Live800:服务经济时代,企业如何满足客户需求?
- java 买票_java 简单买票系统
- 【附源码】Java计算机毕业设计面向企业人力资源管理网上智能考勤系统(程序+LW+部署)
- [附源码]计算机毕业设计Python共享汽车系统(程序+源码+LW文档)
- m4r是什么文件格式?m4r怎么转成mp3?
- JUC-13. JMM
- iPhone 4行货尚远 水货暴利2千元