combase 错误(尚未调用 CoInitialize)

combase error (CoInitialize has not been called)

onecore\com\combase\objact\objact.cxx(812)\combase.dll!00007FF8BD322169: (caller: 00007FF8BD320F78) ReturnHr(1) tid(b54) 800401F0 CoInitialize 尚未调用。

我正在使用 Visual Studio 2015 并开始收到以下错误消息。我不是在尝试编写 dll 或使用 COM 对象或其他任何东西。它只是一个简单的 OpenGL 程序。我不知道这个错误信息是从哪里来的。我该如何摆脱它?

您正在隐式使用 COM。没有代码,我们无法准确知道。它可能来自 shell api、通用文件对话框、操纵杆处理等

你需要把CoInitialize( 0 );放在一些main函数(或WinMain或wWinMain)的开头,CoUninitialize();放在函数的结尾。如果需要使用特定的并发模型,还有CoInitializeEx

CoInitialize description

我的程序在 WinMain 中调用了 CoInitialize(NULL),但是在加载一些 DLL 时(在 运行 之后)我仍然看到这个错误。 但是,在尝试枚举系统中的声卡时,我遇到了同样的错误。 解决方案是使用 CoInitializeEx(NULL, COINIT_MULTITHREADED),这将确保允许来自任何线程的 COM 调用。