错误 C2440:“默认参数”:无法从“const wchar_t [1]”转换为“BSTR”
Posted
技术标签:
【中文标题】错误 C2440:“默认参数”:无法从“const wchar_t [1]”转换为“BSTR”【英文标题】:error C2440: 'default argument': cannot convert from 'const wchar_t [1]' to 'BSTR' 【发布时间】:2016-05-13 07:45:16 【问题描述】:使用此命令时出现以下错误qmake.exe project.pro -r -spec win32-msvc2015
C:\Program Files (x86)\Windows Kits\8.1\include\um\mshtml.h(50130): error C2440: 'default argument': cannot convert from 'const wchar_t [1]' to 'BSTR'
它与qmake.exe project.pro -r -spec win32-msvc2013
配合得很好
意味着它使用 win32-msvc2013 构建良好,但不是 win32-msvc2015。我在项目文件中添加了以下行,之后我能够在 2013 年构建,但在 2015 年不行。
win32: QMAKE_CXXFLAGS_RELEASE -= -Zc:strictStrings
有人知道 2015 年需要什么吗?
【问题讨论】:
【参考方案1】:这是因为某些 Windows 标头违反了 strictStrings 规则。您可以尝试进一步放松检查:
win32: QMAKE_CXXFLAGS_RELEASE -= -Zc:strictStrings
win32: QMAKE_CFLAGS_RELEASE -= -Zc:strictStrings
win32: QMAKE_CFLAGS -= -Zc:strictStrings
win32: QMAKE_CXXFLAGS -= -Zc:strictStrings
【讨论】:
我遇到了同样的问题。这解决了我的问题。谢谢@talamaki! 请不要这样做BSTR
is NOT a wchar_t*
,并且在传递给需要BSTR
的方法时不应被这样对待
@Mgetz 尽管如此,MIDL 将为自动生成的头文件中的字符串参数的默认值发出这样的赋值。
@Craig 那可能是,我不能谈论 MIDL 错误。我会说,根据 COM ABI,将 wchar_t*
传递给期望 BSTR
的参数是未定义的行为。以上是关于错误 C2440:“默认参数”:无法从“const wchar_t [1]”转换为“BSTR”的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2440:“正在初始化”:无法从“const int”转换为“int *”
vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决
vs2017 :C2440 错误,无法从 const char[] 转换为 char*问题解决
error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”