Visual Studio C++“默认参数”:无法从“const wchar_t”转换为“BSTR”

guz6ccqo  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(501)

1.我启动了使用"Visual Studio 2017-Windows XP(v141_xp)"平台工具集的C++项目
1.将运行时库设置为"多线程(/MT)"
1.将"调试"更改为"发布"
1.将#include "<Wbemidl.h>"添加到源代码中。

  1. CTRL F5(又名构建)
    现在,我意识到平台集已经过时了,但是,不管怎样,默认的x64构建版本都没有问题。但是,当我从"x64"更改为"x86"时(因为这是我想要的),它会产生大量错误,如下所示:
    C++"默认参数":无法从"const wchar_t"转换为"BSTR"
    你可能会问我在做什么?也许我的一些代码是坏的?你不应该把wchar_t转换成BSTR,因为它没有定义,结果会是什么?
    但这些都不是;我没有添加任何代码--只是添加了一个标题include(我没有添加"Hello World"部分)。
    我没有明确转换任何东西,因为错误是在微软系统的头文件,而不是在我的代码。我没有添加任何与QT有关的东西,我也不需要或想要QT,所以这不是问题。
    我只是现在想使用<Wbemidl.h>头文件编译我的"Hello World"程序。(当然,我并不 * 需要 * 那个头文件来编译它,但是,如果我能毫无问题地编译它,我很可能就能毫无问题地使用这个库。)我想让这个过程尽可能简单,这就是为什么它只是"Hello World"(一个MCVE)。
    我尝试添加以下内容,但没有成功:
  1. #pragma comment(lib, "Shlwapi.lib")
  2. #pragma comment(lib, "wbemuuid.lib")

我最好的猜测是,我没有安装的东西和/或它只是不赞成;有趣的是"2015 Visual Studio(140_xp)"的作品。
I just want to compile my C++ "Hello World" Program with the Header "<Wbemidl.h>" , Compiled in "x86", Toolset of "Visual Studio 2017 - Windows XP (v141_xp)" and Runtime Library as "Multi-Threaded (/MT)"
我的代码(MCVE):

  1. #include <iostream>
  2. #include <Wbemidl.h>
  3. int main()
  4. {
  5. std::cout << "Hello World!\n";
  6. }

Microsofts Code ERROR
我尝试过的其他事情:
1.严格QT字符串标记
1.包括其他东西
1.从"多线程(/MT)"更改为"多线程DLL(/MD)"
1.尝试制作4个不同的项目

zhte4eai

zhte4eai1#

自(IIRC)VS 2019(当然VS 2022也是如此)以来,C编译器有一个设置(默认情况下)强制更严格地遵守语言标准。该设置(“Conformance Mode”)将阻止(旧版)SDK头文件中使用的转换(const w_char[]BSTR)。
VS 2017中已存在此选项,但默认情况下处于禁用状态;在VS 2015中(你说它工作时没有错误),这个选项根本不存在。2因此,当你把工具集从VS 2022改为VS 2017时,你(无意中)启用了“一致性模式”选项。
若要禁用这些错误,需要关闭一致性模式。请在项目设置中,转到“C/C
...““语言”属性页,并将“一致性模式”设置为“否”:

很可能还会有许多其他的 * 警告 *,但系统头文件至少会在没有 * 错误 * 的情况下编译。
注意,当使用较新的工具集时,MSVC编译器使用来自较新SDK的系统头文件;在这些报头中,问题已经被适当地解决,因此可以使用一致性模式。

相关问题