我正在尝试将现有的本机C ++ ATL进程内COM服务器强制转换为单独的进程。我希望DCOM能够在不改变COM服务器的情况下为我做到这一点。
我从通常的注册表设置开始 - 我有一个HKCR \ CLSID {classId}条目和一个InProcServer32密钥,指定.dll文件的路径。
我生成了一个应用程序ID(GUID)并在此处添加了它。具体来说,我在HKCR \ CLSID {classId}下添加了一个等于应用程序ID的字符串值“AppId”。我还添加了一个HKCR \ AppId {applicationId}键和一个字符串值“DllSurrogate”等于一个空字符串。我认为将我的COM服务器强制转换为默认的系统提供的代理就足够了。
DCOM应用程序出现在DCOM配置控制台中。但是,当我调用CoCreateInstance()
或CoGetClassObject()
并提供类ID和CLSCTX_LOCAL_SERVER
时,它会返回“未注册的类”。我做错了什么?
UPD:已解决。所采取的步骤足以使其工作,除了我正在编辑注册表中的错误的类ID,由于某种原因在InProcServer32密钥下有相同的路径 - 也许这是一个COM地狱问题。
答案 0 :(得分:2)
错误的注册表项。你需要在HKCR \ CLSID {classId}中设置LocalServer32,而不是InProcServer32。
但是,Windows无法实例化DLL。因此,您需要将程序更改为完整的COM服务器exe。 Windows将启动您的EXE并发送参数/嵌入。然后,您可以创建CComModule并启动您的程序。
答案 1 :(得分:2)
CLSCTX_LOCAL_SERVER
位已设置且CLSID键未指定LocalServer32,LocalServer或LocalService。 (的检查强>)答案 2 :(得分:0)
这不是DLLHOST.EXE的用途吗?