我一直在尝试一些最终可能变成不可能的事情。自从我进入 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 已正确注册并使用类型库进行编码(marshal)处理(也已注册)。
我是不是遗漏了什么,或者我想做的根本不可能?如果是后者,是否有适合我的简单替代方案?
最佳答案
似乎当你想使用GetActiveObject
时,你的 friend 是RegisterActiveObject
和RevokeActiveObject
。我完全不在了。它现在完美运行!我希望这对某人有所帮助。
关于c++ - 从另一个进程访问 STA 对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9185477/