VS2017(v141_xp) x86编译含Wbemidl.h程序遇类型转换错误
问题描述
使用Visual Studio 2017 - Windows XP (v141_xp)平台工具集创建C++项目,按以下步骤操作后:
- 设置运行库为
Multi-Threaded (/MT) - 切换到Release模式
- 源码中添加
#include <Wbemidl.h> - 编译(CTRL+F5)
x64架构编译正常,但切换到x86后出现大量错误:
C++ 'default argument': cannot convert from 'const wchar_t' to 'BSTR'
错误来自微软系统头文件,仅保留HelloWorld代码,未涉及显式类型转换或QT,尝试过添加库引用、调整运行库、创建新项目等方法均无效,而Visual Studio 2015(v140_xp)可正常编译,需求是在指定环境下完成编译。
解决方案
方法1:指定目标Windows版本并调整头文件包含顺序
- 在项目属性的C/C++ -> 预处理器 -> 预处理器定义中添加
_WIN32_WINNT=0x0501(对应Windows XP的版本号) - 修改源码的头文件包含顺序,确保先包含
<windows.h>再引入<Wbemidl.h>:
#define _WIN32_WINNT 0x0501 #include <windows.h> #include <Wbemidl.h>
方法2:调整wchar_t编译选项
如果方法1无效,在项目属性的C/C++ -> 语言中,将将wchar_t视为内置类型设置为否(/Zc:wchar_t-),强制编译器将wchar_t视为typedef类型,匹配XP平台工具集的头文件定义逻辑。
方法3:禁用特定类型转换错误
若上述方法仍不生效,可临时禁用触发错误的类型转换检查:
在项目属性的C/C++ -> 命令行中添加/wd2440(错误码C2440对应此类类型转换错误),但此方法仅作为临时 workaround,建议优先使用前两种方法。
内容的提问来源于stack exchange,提问作者Tony Tone
相关产品推荐
相关产品推荐

