描述:
我创建了一个进程外组件,并在线程模型选择“Both”,然后选择支持FTM(Free Threaded Marshale),但在启动的线程中仍然无法调用COM中的方法啊,请指点一下,我是这样调用的:
先在InitDialog中初始化,没问题
HRESULT hr = CoInitialize(NULL);
if(FAILED(hr))
{
TRACE("error\n");
return FALSE;
}
// 创建COM对象
hr = CoCreateInstance(CLSID_Simple02, NULL, CLSCTX_ALL,
IID_ISimple02, (void **)&pISimple02);
if(FAILED(hr))
{
CoUninitialize();
TRACE("error\n");
return FALSE;
}
然后,在一按钮中触发一个线程,在线程中无法调用方法,如下:
启动线程:
HANDLE hThread = CreateThread(NULL,0,TestThread,this,0,NULL);
下面是线程实现:
DWORD WINAPI CUseCamDlg::TestThread(LPVOID lParam)
{
BSTR bstrOS;
hr = pISimple02->GetOSVersion(&bstrOS);//此时失败,请指点
char *pszOS;
pszOS = _com_util::ConvertBSTRToString(bstrOS);
return 1;
}
解决方案1:
需要初始化
解决方案2:在线程函数中添加初始化COM的代码
解决方案3:每个线程中都需要初始化COM
解决方案4:来晚了.哎
解决方案5: 每个线程中 需要初始化 COM
CoInitialize