错误 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”

error C2440: “=”: 无法从“const char [18]”转换为“LPCWSTR”

error C2440: “=”: 无法从“const wchar_t [4]”转换为“LPWSTR”