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

时间:2012-02-07 23:11:44

标签: c++ com marshalling atl

我一直在尝试最终可能变得不可能的事情。自从我进入COM领域以来已经很久了。

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

我尝试了两种方法(可能会变成同样的事情)。

方法1:我尝试使用CoRegisterClassObject注册对象的STA实例。此调用以S_OK成功。但是如果我在GetActiveObject后尝试CoRegisterClassObject使用相同的CLSID,我会MK_E_UNAVAILABLE - 0x800401e3

GetActiveObject是否需要调用错误的API?如果没有,为什么会失败?

方法2:我也尝试过使用GetRunningObjectTableIRunningObjectTable:RegisterCreateClassMoniker,但在第二个应用中尝试从ROT获取对象时,我遇到了另一个失败。

我的STA DLL已正确注册,并使用typelib进行编组(也已注册)。

我是否遗漏了某些东西或者我想要的东西根本不可能?如果是后者,对我来说有什么简单的选择吗?

1 个答案:

答案 0 :(得分:1)

当您想要使用GetActiveObject时,您的朋友似乎是RegisterActiveObjectRevokeActiveObject。我完全没了。它现在完美运作!我希望这有助于某人。