windows - 我究竟应该如何配置 DCOM 以将我的 DLL 加载到一个单独的进程中?

标签 windows com com-interop atl dcom

我试图将现有的 native 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 编辑注册表,该类 ID 由于某种原因在 InProcServer32 键下具有相同的路径 - 也许这是一个 COM hell 问题。

最佳答案

Follow the check list :

  1. 必须在注册表中的 CLSID 键下指定一个 AppID 值,以及一个相应的 AppID 键。 (检查)
  2. 在激活调用中,设置了 CLSCTX_LOCAL_SERVER 位并且 CLSID key 未指定 LocalServer32、LocalServer 或 LocalService。 (检查)
  3. CLSID 键包含 InprocServer32 子键。 (检查)
  4. InprocServer32 键中指定的代理/ stub DLL 存在。 ???
  5. AppID 键下存在 DllSurrogate 值。 (检查)

关于windows - 我究竟应该如何配置 DCOM 以将我的 DLL 加载到一个单独的进程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1706429/

相关文章:

windows - 安装时如何指定redis的配置文件?

visual-c++ - 将可选参数传递给 VC++ 中的 COM 函数

python - 具有多个参数的 COM "get property"

excel - 通过 Excel 2007 调用 Assembly.LoadFrom 失败

PowerShell:如何将 COM 对象转换为 .NET 互操作类型?

windows - 通过 Cygwin(调用 shell 脚本)创建的文件没有正确的 Windows 权限

php - 写入 php ://stderr

c++ - 如何从 C++ 使用 Windows API 获取应用程序的 CPU 使用率或磁盘使用率?

windows - 为什么我不需要在 COM 线程内创建的线程中调用 CoInitialize?

.net - COM Interop无需再充气