【发布时间】:2018-09-25 15:08:06
【问题描述】:
使用 VS2017 我使用 unicode 字符集编译下面的代码
STDMETHODIMP Load(LPCOLESTR lpwszFileName, const AM_MEDIA_TYPE *pmt) {
TCHAR *szExtension = PathFindExtension(lpwszFileName);
我收到以下错误
error C2664: 'LPSTR PathFindExtensionA(LPCSTR)': cannot convert argument 1 from 'LPCOLESTR' to 'LPCSTR'
VS2008下同样的代码编译就好了。这里似乎有什么问题以及为什么编译器选择 PathFindExtenstion 的 ANSI 版本而不是 unicode 版本?
【问题讨论】:
-
LPCOLESTR始终是宽字符串 (UTF-16LE)。您不是为 Unicode 构建的,因此宏PathFindExtension被替换为PathFindExtensionA,它需要一个窄字符串。 (a) 更改项目选项以编译为 Unicode(推荐); (b) 显式调用PathFindExtensionW,或 (c) 在调用前将宽字符串转换为窄字符串。 -
我检查了两次项目设置中的字符代码调整为unicode。
-
检查
Configuration Properties > C/C++ > Command Line这给出了正在使用的实际命令行。查找/D "_UNICODE" /D "UNICODE"如果缺少其中一个或两个,则项目属性中的其他地方有问题。 -
@Richard 我一回到我的办公室就会去看看,我会告诉你的。谢谢
-
@Richard 你说得对。命令行中没有 _UNICODE 定义器。看看下面。 VS 中的哪些参数可以改变正常行为? /GS /analyze- /W3 /Zc:wchar_t /I"..\..\BaseClasses\" /I"D:\gnosis_v2.00u" /ZI /Gm /Od /Fd"Debug\vc141.pdb" /Zc :inline /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gz /Oy- /MDd /FC /Fa"Debug\" /EHsc /nologo / Fo"Debug\" /Fp"Debug\Async.pch" /diagnostics:classic
标签: c++ string unicode compiler-errors c2664