我正在尝试将现有的本机 C++ ATL in-proc COM 服务器强制转换为单独的进程。我希望 DCOM 可以在不更改 COM 服务器的情况下为我做到这一点。
我从通常的注册表设置开始 - 我有一个 HKCR\CLSID{classId} 条目和一个 InProcServer32 键,其中指定了 .dll 文件的路径。
我生成了一个应用程序 ID (GUID) 并在这里和那里添加了它。具体来说,我在 HKCR\CLSID{classId} 下添加了一个字符串值“AppId”,等于应用程序 ID。我还添加了一个 HKCR\AppId{applicationId} 键和一个等于空字符串的字符串值“DllSurrogate”。我认为将我的 COM 服务器强制为系统提供的默认代理就足够了。
DCOM 应用程序出现在 DCOM 配置控制台中。但是,当我调用CoCreateInstance()
orCoGetClassObject()
并提供类 ID 时,CLSCTX_LOCAL_SERVER
它会返回“类未注册”。我究竟做错了什么?
UPD:已解决。所采取的步骤足以使其工作,除了我正在为错误的类 id 编辑注册表,由于某种原因在 InProcServer32 键下具有相同的路径 - 也许这是一个 COM 地狱问题。