c++ - 从另一个进程访问 STA 对象时出现问题

标签 c++ com marshalling atl

我一直在尝试一些最终可能变成不可能的事情。自从我进入 COM 领域以来已经有很长一段时间了。

考虑两个应用程序和一个 COM STA DLL。第一个应用程序将 COM STA DLL 作为插件加载,此 DLL 尝试“全局”注册自己,以便第二个应用程序可以看到它。类似于 GetObject("Excel.Application")

我已经尝试了两种方法(它们可能变成同一件事)。

方法 1:我已尝试使用 CoRegisterClassObject 来注册我的 STA 对象实例。此调用成功并返回 S_OK。但是,如果我尝试在 CoRegisterClassObject 之后立即使用相同的 CLSID GetActiveObject,我会得到 MK_E_UNAVAILABLE - 0x800401e3

GetActiveObject 调用的 API 是否错误?如果不是,为什么会失败?

方法 2:我也尝试过使用 GetRunningObjectTableIRunningObjectTable:RegisterCreateClassMoniker 但是当尝试从 ROT 中获取对象时第二个应用程序,我面临另一个失败。

我的 STA DLL 已正确注册并使用类型库进行编码(marshal)处理(也已注册)。

我是不是遗漏了什么,或者我想做的根本不可能?如果是后者,是否有适合我的简单替代方案?

最佳答案

似乎当你想使用GetActiveObject时,你的 friend 是RegisterActiveObjectRevokeActiveObject。我完全不在了。它现在完美运行!我希望这对某人有所帮助。

关于c++ - 从另一个进程访问 STA 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185477/

相关文章:

c++ - Sobel 的梯度是什么意思?

c++ - xcode 10 和 11,没有高级语法着色 (c++)

c# - shell 扩展如何将多个选定的文件传递给我自己的程序?

java - 使用 JAXB 注释对属性进行分组

json - Grails JSON marshaller中的自定义字符串格式

c++ - 将 vector 迭代器转换为指针

c++ - 应用程序中的全局计数器 : bad practice?

com - 如何使用没有 tlb 文件的进程外 COM 服务器

c++ - shell 扩展:IShellExtInit::Initialize 调用了 4 次

c# - 我正在尝试将结构从 C 编码到 C#,但不确定从哪里开始