我一直在尝试可能最终无法实现的事情。自从我进入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:我也尝试过使用GetRunningObjectTable
,IRunningObjectTable:Register
和CreateClassMoniker
,但是当尝试在第二个应用程序中从ROT获取对象时,我面临另一个失败。
我的STA DLL已正确注册,并使用typelib进行封送处理(也已注册)。
我是否缺少某些东西,或者我根本无法做到?如果是后者,对我来说还有其他简单的选择吗?
最佳答案
似乎当您想使用GetActiveObject
时,您的 friend 是RegisterActiveObject
和RevokeActiveObject
。我完全不在了。现在可以正常工作了!我希望这可以帮助别人。
关于c++ - 从另一个进程访问STA对象时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9185477/