我是个新手,刚接触COM没多长时间,现在遇上一个问题,希望得到大人们的帮助!
我编写了一个简单的COM(inproc dll)然后用CreateThread方法Create出来的多个线程中间都使用CoCreateInstance来得到生成新的COM对象从而得到COM的接口,可是执行结果显示只有第一个线程成功的获得了接口,其他的线程都fail to get Interface了,请问这是怎么回事?究竟多线程的COM怎么处理呢?
我编写了一个简单的COM(inproc dll)然后用CreateThread方法Create出来的多个线程中间都使用CoCreateInstance来得到生成新的COM对象从而得到COM的接口,可是执行结果显示只有第一个线程成功的获得了接口,其他的线程都fail to get Interface了,请问这是怎么回事?究竟多线程的COM怎么处理呢?
{
IDetectFace *piDF=NULL;
HRESULT hres;
::CoInitialize(NULL);
hres=::CoCreateInstance(CLSID_FaceProcess,NULL,CLSCTX_INPROC_SERVER,
IID_IDetectFace,(void **)&piDF); Sleep(1000);
if (SUCCEEDED(hres))
{
trace("Succeeded getting IID_IDetectFace!");
piDF->DetectFace();
piDF->Release();
}
else
{
trace("Failed to get IID_IDetectFace!");
switch(hres)
{
case REGDB_E_CLASSNOTREG:
trace("REGDB_E_CLASSNOTREG");
break;
case E_NOINTERFACE:
trace("E_NOINTERFACE");
break;
}
}
::CoUninitialize();
}
MSDN上有写:add the ThreadingModel named-value to the InprocServer32 key in the registry.如果没有这个value,那么默认为只能在一个进程中间有第一个线程能拥有COM对象成为
Apartment
谢谢大家的帮助!