我一直在尝试最终可能变得不可能的事情。自从我进入COM领域以来已经很久了。
考虑两个应用程序和一个COM STA DLL。第一个应用程序加载COM STA DLL作为插件,这个DLL尝试“全局”注册自己,以便第二个应用程序看到它。类似于GetObject("Excel.Application")
。
我尝试了两种方法(可能会变成同样的事情)。
方法1:我尝试使用CoRegisterClassObject
注册对象的STA实例。此调用以S_OK
成功。但是如果我在GetActiveObject
后尝试CoRegisterClassObject
使用相同的CLSID,我会MK_E_UNAVAILABLE - 0x800401e3
。
GetActiveObject
是否需要调用错误的API?如果没有,为什么会失败?
方法2:我也尝试过使用GetRunningObjectTable
,IRunningObjectTable:Register
和CreateClassMoniker
,但在第二个应用中尝试从ROT获取对象时,我遇到了另一个失败。
我的STA DLL已正确注册,并使用typelib进行编组(也已注册)。
我是否遗漏了某些东西或者我想要的东西根本不可能?如果是后者,对我来说有什么简单的选择吗?
答案 0 :(得分:1)
当您想要使用GetActiveObject
时,您的朋友似乎是RegisterActiveObject
和RevokeActiveObject
。我完全没了。它现在完美运作!我希望这有助于某人。