项目使用Unicode编码,当使用tinyxml2读取xml内容时,利用root->Name()获取的是const char*类型的字符串,直接传递给Edit->SetWindowTextW(),报以下错误
严重性 代码 说明 项目 文件 行 禁止显示状态
错误(活动) E0167 “const char *” 类型的实参与 “LPCTSTR” 类型的形参不兼容 MFCTinyxml2 C:\WebSite\MFCTinyxml2\MFCTinyxml2Dlg.cpp 106

导致无法正常编译

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C2664 “void CWnd::SetWindowTextW(LPCTSTR)”: 无法将参数 1 从“const char *”转换为“LPCTSTR” MFCTinyxml2 C:\WebSite\MFCTinyxml2\MFCTinyxml2Dlg.cpp 106
1、使用微软提供的ANSI转宽字符的函数MultiByteToWideChar,将char* 转换成 wchar_t*(宽字符)
2、再赋值给接受LPCTSTR宽字符类型的参数,就不再报错

附加示例代码:
const char* name = elmtRoot->Name();
//先获取转换成宽字符后的长度(一定要通过这种方式,先回去字符长度,因为有指定编码为CP_ACP,编码不同,长度也会不同)
int nLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, NULL, 0);
//声明一个宽字符类型变量,用于存放转换后的字符
wchar_t* wname = new wchar_t[nLen];
//利用微软ANSI转宽字符的函数(name:ANSI字符,wname:宽字符)
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, name, -1, wname, nLen);
pEditXml->SetWindowText(wname);
1、网上有一些文章直接建议将VC++环境的字符集换成“多字节字符集”,强烈不建议这样做,因为Unicode是等同于UTF-8的编码格式,而多字节等同于GB2312(非国际化编码)

2、使用同一个函数/方法,网上示例却可以直接传char类型的参数,而我却一定要转成宽字符wchar_t的才行呢?
因为同样一个参数,VS为了国际化,目前默认字符集为“使用Unicode字符集”,以前大部分教程都是老版本VS或其他C++开发工具,因此无需转换,直接就可以接受char*类型的参数。
按住Ctrl键,打开VS中的方法定义,可以看出使用UNICODE字符集时,会自动对应SetWindowTextW(LPCWSTR str),否则对应SetWindowTextA(LPCSTR str)


3、要求传参是LPCWSTR的,为何报错是无法转换成LPCTSTR呢?
注:此问题我至今未解惑,只了解到以下逻辑关系,大致可理解,但还有不通的地方
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r
相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声
首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有, 也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal