我一直在尝试可能最终无法实现的事情。自从我进入COM领域已有很长时间了。

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

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

方法1:我尝试使用CoRegisterClassObject注册我的对象的STA实例。此调用以S_OK成功。但是,如果我尝试在GetActiveObject之后立即使用相同的CLSID来CoRegisterClassObject,我会得到MK_E_UNAVAILABLE - 0x800401e3
GetActiveObject是调用错误的API吗?如果没有,为什么会失败?

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

我的STA DLL已正确注册,并使用typelib进行封送处理(也已注册)。

我是否缺少某些东西,或者我根本无法做到?如果是后者,对我来说还有其他简单的选择吗?

最佳答案

似乎当您想使用GetActiveObject时,您的 friend 是RegisterActiveObjectRevokeActiveObject。我完全不在了。现在可以正常工作了!我希望这可以帮助别人。

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

10-13 06:58