gpt4 book ai didi

c++ - CoInitialize() 在 C++ 中未被调用异常

转载 作者:可可西里 更新时间:2023-11-01 17:26:00 28 4
gpt4 key购买 nike

-我的问题

我得到 CoInitialize has not been called exption.

-我的项目结构

这是我的问题。我有一个用 C# 开发的 COM dll,MCLWrapper.dll;我有另一个本地 C++ dll,调用 MCLWrapper.dll 的 ThorDetectorSwitch.dll;最后,我有一个调用 ThorDetectorSwitch.dll 的控制台应用程序 TDSTest.exe。基本上,是这样的:

TDSTest.exe(C++ 控制台)-> ThorDetectorSwitch.dll(C++ native )-> MCLWrapper.dll (C#)


TDSTest.exe 中加载 ThorDetectorSwitch.dll 的代码:

HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\Hardware\\Devices\\ThorDetectorSwitch\\TDSTest\\TDSTest\\Debug\\Modules_Native\\ThorDetectorSwitch.dll"));

ThorDetectorSwitch.cpp 中的构造函数

ThorDetectorSwitch::ThorDetectorSwitch() : _mcSwitch(__uuidof(MCLControlClass))
{
_A = WstringToBSTR(L"A");
_B = WstringToBSTR(L"B");
_C = WstringToBSTR(L"C");
_D = WstringToBSTR(L"D");

_deviceDetected = FALSE;
}

断点打在上面ThorDetectorSwitch.dll的构造函数的第一个括号上,但是如果我按F10(多了一步),异常立即出现

跳转到

 hr = CoCreateInstance(rclsid, pOuter, dwClsContext, __uuidof(IUnknown), reinterpret_cast<void**>(&pIUnknown));

在 comip.h 中。 hr 只是“尚未调用 CoInitialize”。

我这几天一直在想这个问题,想不出解决办法。这里的任何人都可以分享任何想法吗?真的很感激。

最佳答案

您的 COM dll 要求您处于单线程单元模式。您需要调用CoInitialize在使用它之前。

将此添加到您的 .exe 中:

CoInitialize(nullptr); // NULL if using older VC++

HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\...

关于c++ - CoInitialize() 在 C++ 中未被调用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17076441/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com