13

-我的问题

我得到了 CoInitialize 并没有被称为 exption。

-我的项目结构

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

TDSTest.exe(C++ 控制台)-> ThorDetectorSwitch.dll(C++ 本机)-> 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”。

几天来我一直在思考这个问题,但无法找到解决方案。这里的任何人都可以分享任何想法吗?真的很感激。

4

1 回答 1

24

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

将此添加到您的 .exe 中:

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

HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\...
于 2013-06-12T22:29:34.460 回答