描述:
我创建了一个进程外组件,并在线程模型选择“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:
xuexi
解决方案2:解决了,接分。^_^
解决方案3: HRESULT hRet = CoInitializeEx(NULL, COINIT_MULTITHREADED);
ATLASSERT(hRet == S_OK);
if(hRet != S_OK)
return ;
//处理过程
CoUninitialize ();
呵呵,楼主解决了,^_^
解决方案5: 看到你的另一个贴子说已经解决。祝贺!
以后遇这样的问题要: 用VC的Error Lookup工作看hr返什么信息,一般会告诉你出错的原因。