3

我正在尝试使用代理进程 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();
4

0 回答 0