我正在尝试使用代理进程 dllhost 在单独的 64 位 dllhost 进程中运行我的 COM 64 位 dll。我已经为此创建了所需的注册表项。
当我尝试使用 CoCreateInstance 或 CoGetClassObject 和 CreateInstance 创建我的类的对象时,我收到 E_FAIL 错误。如果我指定 CLSCTX_LOCAL_SERVER 标志,则会观察到错误。此调用适用于 CLSCTX_INPROC_SERVER 标志,但当然不在单独的进程 dllhost 中。
在使用 CLSCTX_LOCAL_SERVER 时,我可以在任务栏中看到 dllhost.exe;这表明代理相关的注册表项是正确的,但是对 CoCreateInstance/CreateInstance 的调用失败并出现错误 E_FAIL。
这是代码片段:-
hr = CoInitialize (NULL);
if(FAILED(hr))
return hr;
IClassFactory *ptr;
// I can see dllhost in task manager after this call
hr = CoGetClassObject(CLSID_MyID, CLSCTX_LOCAL_SERVER, 0,IID_IClassFactory,(void**)&ptr);
// Works fine with CLSCTX_INPROC_SERVER
//hr = CoGetClassObject(CLSID_MyID, CLSCTX_INPROC_SERVER, 0,IID_IClassFactory,(void**)&ptr);
if(FAILED(hr))
return hr;
ptr->LockServer(TRUE);
hr = ptr->CreateInstance(NULL, IID_IUnknown, (void**) &myPointer);
if(FAILED(hr)) // I get E_FAIL here if CLSCTX_LOCAL_SERVER is on.
return hr;
ptr->LockServer(FALSE);
ptr->Release();