【问题标题】:Problems getting access to a STA object from another process从另一个进程访问 STA 对象时出现问题
【发布时间】:2012-02-29 10:12:21
【问题描述】:

我一直在尝试一些最终可能变得不可能的事情。我已经很久没有进入 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 已正确注册并使用 typelib 进行编组(也已注册)。

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

【问题讨论】:

    标签: c++ com marshalling atl


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 2013-09-23
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多