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

Problems getting access to a STA object from another process

本文关键字:问题 对象 STA 另一个 进程 访问      更新时间:2023-10-16

我一直在尝试一些最终可能会变成不可能的事情。我已经很久没有来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进行封送处理(也已注册)。

我是错过了什么,还是我想做的根本不可能?如果是后者,我有什么简单的选择吗?

当你想使用GetActiveObject时,你的朋友似乎是RegisterActiveObjectRevokeActiveObject。我完全疯了。现在效果很好!我希望这能帮助到别人。