- 我的问题
我的CoInitialize没有被称为exption。
- 我的项目结构
这是我的问题。我有一个COM DLL,用C#开发MCLWrapper.dll;我有一个原生的C ++ DLL,ThorDetectorSwitch.dll调用MCLWrapper.dll;最后,我有一个调用ThorDetectorSwitch.dll的控制台应用程序TDSTest.exe。基本上,这样的事情:
TDSTest.exe(C ++控制台) - > ThorDetectorSwitch.dll(C ++ native) - > MCLWrapper.dll(C#)
加载ThorDetectorSwitch.dll的TDSTest.exe中的代码:
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”。
我一直在想这个问题好几天,无法找到解决办法。这里有人可以分享任何想法?真的很感激。
答案 0 :(得分:14)
您的COM dll要求您处于单线程公寓模式。您需要在使用之前致电CoInitialize
。
将此添加到您的.exe:
CoInitialize(nullptr); // NULL if using older VC++
HINSTANCE hInst = LoadLibrary(_T("C:\\TIS_Nick\\...