不能从const char *转换为LPCWSTR 经常碰到

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

在VC 6.0中编译成功的项目在VS2005 vs2005、vs2008、vs2010中常会出现类型错误。

经常出现的错误是:不能从const char *转换为LPCWSTR

如使用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);

另一种方法是:项目菜单——项目属性(最后一个)——配置属性——常规——项目默认值——字符集,将使用Unicode字符集改为未设置即可。

什么原因:

因为你的程序在UNICODE(宽字节)字符集下运行,如果调用了 MessageBox ,实际上调用的是 MessageBoxW 函数;

如果你的程序在 ANSI 字符集运行,调用 MessageBox ,就相当于调用 MessageBoxA;

其中 MessageBoxW 支持 UNICODE;MessageBoxA 支持ANSI;

UNICODE与ANSI 有什么区别呢?简单的说,UNICODE版的字符比ANSI 的内存占用大,比如:Win32程式中出现的标准定义 char 占一个字节,

而 char 的UNICODE版被定义成这样:

typedef unsigned short wchar_t ;占2个字节。

所以有字符做参数的函数相应也用两个版本了。
const char *“ 类型的实参与 “LPCTSTR“ 类型的形参不匹配 总结起来,当遇到 “const char *” 类型的实参与 “LPCTSTR” 类型的形参不兼容的错误时,我们可以使用类型转换来解决问题。通过适当的类型转换,将实参的类型转换为与形参类型相匹配的类型,可以成功地调用函数并解决类型不匹配的问题。当我们使用 “const char *” 类型的实参调用一个期望 LPCTSTR 类型的形参的函数时,由于它们的类型不匹配,编译器会报错。否则,编译器将会发出类型不匹配的错误。在使用类型转换时,我们应该确保所做的转换是安全的,并且在转换后的类型上执行的操作是合法的。 阅读详情

相关推荐

Qt中如何将char*LPCWSTR

Qt中如何将char*LPCWSTRLPCWSTR pStr=LPCWSTR(QString("Gavin").utf16());

草上爬的博客 5440

const char*LPCWSTR的方法记录

vs2010中写win32项目时经常碰上LPCWSTR类型的字符串,而LPCWSTR类型的字符串不能与以往常用的char*完美地互相转换。使用强制转型wText=(LPCWSTR)szText不能保证wText的内容完好如初。所以我们需要一点小帮助。       在这里我记录一个从char*无失精度地转到LPCWSTR的方法:char* szStr = "test code"; WCHAR

LinXiZh的博客 6953

const char *LPCWSTR

【代码】const char *LPCWSTR

bangtanhui的博客 913

不能const char *转换LPCWSTR 经常碰到

不能const char *转换LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005、vs2008、vs2010中常会出现类型错误。 经常出现的错误是:不能const char *转换LPCWSTR 如使用MessageBox(hwnd,"TE

pirate97的专栏 1万+

不能const char *转换LPCWSTR 经常碰到(转)

不能const char *转换LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005、vs2008、vs2010中常会出现类型错误。 经常出现的错误是:不能const char *转换LPCWSTR 如使用MessageBox(hwnd,"TEST",NULL,0)就会报错,如果使用强制转换LPCWSTR)"TEST",虽然能够通过,但是编码会出错。...

dmxm80322的博客 204

不能const char *转换LPCWSTR --VS经常碰到

不能const char *转换LPCWSTR 在VC 6.0中编译成功的项目在VS2005 vs2005、vs2008、vs2010中常会出现类型错误。 经常出现的错误是:不能const char *转换LPCWSTR 如使用MessageBox(hwnd,"TEST",NULL,0)就会报错,如果使用强制转换LPCWSTR)"TEST",虽然能够通过,但是编码会出错。 可行的...

weixin_38293850的博客 3096

Windows编程中CString 、char*const char*LPCWSTR类型转换方法

Windows编程中经常涉及到的一个问题是字符串之间的转换,开发过程总是遇到编译器提示无法格式转换的问题,于是自己总结了几种解决办法。 一、char*LPCWSTR     1、通过T2W转换宏    char* szStr = "Mikasoi";      CString str = CString(szStr);    USES_CONVERSION;    LPCWSTR w...

mikasoi的博客 7700

无法const char* 转换LPCWSTR

<br />无法const char* 转换LPCWSTR<br />原文:http://hi.baidu.com/syqust/blog/item/d04a7bd9091987e139012ffc.html<br /> <br />CString ——〉char *  <br />   CString mystring = "abcde";   <br />   char* szmystring = (char *)(LPCTSTR)mystring;   <br />char * ——〉CStr

GISSTAR的专栏 4405

C++char*转换LPCWSTR的解决方案

C++char*转换LPCWSTR的解决方案[转载]更新时间:2017年01月04日 10:49:32 原作者:周旭光1、通过MultiByteToWideChar函数转换2、通过T2W转换宏 [转载]更新时间:2017年01月04日 10:49:32 原作者:周旭光 最近在学习C++,遇到了一个char转换LPCWSTR的问题,通过查找资料终于解决了,所以下面这篇文章主要介绍了C+...

weixin_42628147的博客 3349

C++ char*LPCWSTR

该解决方案源自https://blog.csdn.net/zhouxuguang236/article/details/8761497 首先头文件要导入 #include <atlstr.h> 在Windows编程中,经常会碰到字符串之间的转换char*LPCWSTR也是其中一个比较常见的转换。下面就列出几种比较常用的转换方法。 1、通过MultiByteToWideChar函数转...

fiendwbc的博客 3444

char const char* 类型的实参与LPCWSTR 类型的形参类型不兼容 wchar_t vscode

char类型的实参与LPCWSTR类型的形参类型不兼容 char char是8位字符类型,最多只能包含256种字符,许多外文字符集所含的字符数目超过256个,char无法表示。 wchar_t Wide character 。wchar_t数据类型一般为16位或32位,但不同的C或C++库有不同的规定,如GNU Libc规定wchar_t为32位,总之,wchar_t所能表示的字符数远超...

lanshi00的博客 1万+

char 类型与lpcwstr_C++char*转换LPCWSTR的解决方案

前言大家在学习或者使用Windows编程中,经常会碰到字符串之间的转换char*LPCWSTR也是其中一个比较常见的转换。下面就列出几种比较常用的转换方法。大家可以根据自己的需求选择相对应的方法,下面来一起学习学习吧。1、通过MultiByteToWideChar函数转换MultiByteToWideChar函数是将多字节转换为宽字节的一个API函数,它的原型如下:int MultiByteT...

weixin_39886612的博客 3297
上一篇: VS2010配置DirectX 9.0 3D常见问题
下一篇: 使用Cocos2d-x中的CCMenuItemToggle制作商店
Handz_cpp
博客等级 码龄14年 6粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值