我如何configurationDCOM将我的DLL加载到一个单独的进程?

我试图强制一个现有的本地C + + ATL in-proc COM服务器到一个单独的进程。 我希望DCOM可以做到这一点,而无需更改COM服务器。

我开始使用通常的registry设置 – 我有一个HKCR \ CLSID {classId}条目和一个InProcServer32键指定.dll文件的path。

我生成了一个应用程序ID(GUID)并将其添加到这里和那里。 具体来说,我在HKCR \ CLSID {classId}下添加了一个等同于应用程序ID的string值“AppId”。 我还添加了一个HKCR \ AppId {applicationId}键和一个string值“DllSurrogate”等于一个空string。 我认为这足以迫使我的COM服务器进入一个默认的系统提供的代理。

DCOM应用程序出现在DCOMconfiguration控制台中。 但是,当我调用CoCreateInstance()CoGetClassObject()并提供类ID和CLSCTX_LOCAL_SERVER它返回“类未注册”。 我究竟做错了什么?

UPD:解决。 所采取的步骤足以使其工作,除了我编辑registry的错误的类ID由于某种原因在InProcServer32键下有相同的path – 也许这是一个COM地狱问题。

Solutions Collecting From Web of "我如何configurationDCOM将我的DLL加载到一个单独的进程?"

按照检查清单 :

  1. 必须在注册表中的CLSID项下指定一个AppID值,以及一个对应的AppID项。 ( 选中
  2. 在激活调用中,将设置CLSCTX_LOCAL_SERVER位,并且CLSID键不指定Localserver32,Localserver或LocalService。 ( 选中
  3. CLSID项包含Inprocserver32子项。 ( 选中
  4. 存在Inprocserver32密钥中指定的代理/存根DLL。 ???
  5. DllSurrogate值存在于AppID键下。 ( 选中

错误的注册表项。 您需要在HKCR \ CLSID {classId}中设置Localserver32,而不是InProcserver32。

但是,Windows不能实例化一个DLL。 所以你需要改变你的程序到一个完整的COM服务器EXE。 Windows将启动您的EXE并发送参数/嵌入。 然后你可以创建CCommodulee并启动你的程序。

这不是DLLHOST.EXE是什么?