Nic*_*sui 2 c++ com constructor initialization-list
这是我的 ThorDetectorSwitch.cpp 文件构造函数的 C++ 代码:
ThorDetectorSwitch::ThorDetectorSwitch() : _mcSwitch(__uuidof(MCLControlClass))
{
_A = WstringToBSTR(L"A");
_B = WstringToBSTR(L"B");
_C = WstringToBSTR(L"C");
_D = WstringToBSTR(L"D");
_deviceDetected = FALSE;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,初始化列表_mcSwitch(__uuidof(MCLControlClass))
用于初始化 COM 对象(MCLControlClass,从 COM dll 注册)。
我想知道我是否可以在此初始化列表之前调用 CoInitialize() ?因为我收到“CoInitialize() 尚未被调用”的异常。或者有其他方法可以避免这种异常吗?
多谢。
首先我建议您使用CoInitializeEx
而不是CoInitialize
. 甚至 MSDN 文档也推荐这样做。其次,我建议您在每个需要使用 COM 对象的附加线程的开始处CoInitializeEx
进行调用。main()
这是有充分理由的。例如,在线程结束之前,每个调用都CoInitializeEx
应该有一个相应的调用。CoUninitialize
这可确保 COM 库正确终止。如果从构造函数调用它,您还必须管理 COM 库的初始化次数,以便进行正确的调用次数CoUninitialize
。另一个问题是,当后续调用CoInitializeEx
不同的公寓型号时,它将失败。如果发生这种情况,并且您的构造函数正在检查错误,那么您应该在实例化过程中遇到失败情况。如何处理构造函数中的错误情况?抛出异常——这并不是一件令人愉快的事情。
我的最后建议是阅读文档并以正确的方式做事,否则你最终会像过去几天一样摸不着头脑。
归档时间: |
|
查看次数: |
3789 次 |
最近记录: |