大家好,我是COM小白,请教一个问题用CoRegisterClassObject和CoRegisterPSClsid在主线程内注册多个IID接口后,在当前线程用QueryService可以获取到接口,但是其他创建的线程就无法获取到接口,返回“没有注册的类”错误。
注册代码如下:
DLLINFO Dll_GetProxyDllInfo=(DLLINFO)GetProcAddress(dllHandle,"GetProxyDllInfo");
if(Dll_GetProxyDllInfo==NULL) {
FreeLibrary(dllHandle);
return;
}
// 从dll中获取代理信息 (interface IIDs and the proxy stub CLSID)
CLSID* pProxyClsid=NULL;
ProxyFileInfo** pProxyInfo=NULL;
Dll_GetProxyDllInfo(&pProxyInfo,&pProxyClsid);
if(!pProxyClsid||!pProxyInfo) {
FreeLibrary(dllHandle);
return;
IUnknown* ClassObjPunk=NULL;
res=CoGetClassObject(*pProxyClsid,CLSCTX_INPROC_SERVER,nullptr,IID_IUnknown,(void**)&ClassObjPunk);
DeactivateActCtx(0,actCtxCookie);
ReleaseActCtx(hActCtx);
if(res!=S_OK) {
FreeLibrary(dllHandle);
return;
}
// 向COM重新注册类对象。
DWORD dwCookie;
res=CoRegisterClassObject(regClsid,ClassObjPunk,CLSCTX_INPROC_SERVER,REGCLS_MULTIPLEUSE,&dwCookie);
ClassObjPunk->lpVtbl->Release(ClassObjPunk);
if(res!=S_OK) {
FreeLibrary(dllHandle);
return;