【发布时间】: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:我也尝试过使用 GetRunningObjectTable、IRunningObjectTable:Register 和 CreateClassMoniker,但是当尝试在第二个应用程序中从 ROT 获取对象时,我面临另一个失败。
我的 STA DLL 已正确注册并使用 typelib 进行编组(也已注册)。
我是否遗漏了什么,或者我想要做的事情根本不可能?如果是后者,我有什么简单的替代方案吗?
【问题讨论】:
标签: c++ com marshalling atl