【发布时间】:2019-11-06 11:11:28
【问题描述】:
我正在使用由 myexe.exe 托管的进程外 COM 对象。托管 COM 对象的这些 exe 有多个版本。每个版本的接口和方法都可以略有改变。每个 myexe.exe 文件都位于版本化文件夹中(例如 C:\v2\myexe.exe、c:\v3\myexe.exe)
无法提前知道哪些版本将运行。我的客户端应用程序使用 ROT 附加到正在运行的 exe。我需要能够动态使用该 COM 对象版本,通过 IUnknown.QueryInterface 发现接口。
不幸的是,如果在 Windows 注册表中注册了旧版本的 COM,我在使用新方法时会崩溃。一旦我使用“myexe.exe -regserver”在 Windows 注册表中注册了较新版本的进程外 COM,崩溃就会消失。所以我不能在运行时动态使用旧版本或新版本的 meexe.exe,因为每次我需要重新注册我的 com 版本。
关于我为什么会崩溃或如何解决问题的任何想法?
【问题讨论】:
-
您的意思是您使用的是具有不同界面定义/布局的相同界面 ID (IID)?
-
是的。我不想依赖界面的 Windows 注册表定义。我想像这篇文章一样动态调用它:forums.codeguru.com/…
-
不确定您在做什么/正在寻找什么。您在其他人的 cmets 中谈论 IDispatch。你应该解释得更好。可以肯定的一件事是,您不能在不更改 IID 的情况下更改 IUnknown 派生接口(“早期绑定”)。这是一个刻在石头上的二元合约。
标签: c++ com running-object-table