在运行时替换COM类实现

时间:2010-07-08 16:34:55

标签: com

这是一个很长的镜头,但有没有人知道如何在运行时替换COM类的实现(或者,如果它实际上是可能的)?

我的问题是我们在野外有一个COM DLL,但我们不完全确定它是哪个版本,我们不想只是为了替换这个组件而对软件进行完全重建。有一个单行解决方案需要部署,如果我可以简单地编写另一个COM DLL或类似的东西来替换该类,然后强制COM运行时指向该DLL文件只是为了该类,那将是多么好的

我已经看过OLE / COM对象查看器,并且有更改实现的选项,但我不知道如何正确配置它,因为它似乎没有做太多。

如果有人有任何信息(即使是“我认为是不可能”的答案),这将是非常好的。

干杯, 丹。

2 个答案:

答案 0 :(得分:2)

我没理解,为什么完成重建?您只是更改实现,接口和coclass GUID以及接口定义不应更改。这就是COM客户端对COM服务器的了解。

如果您执行更改接口定义,则必须分配新的GUID。在COM中非常难的规则,跳过它购买巨大的DLL地狱。是的,这需要完全重建。

答案 1 :(得分:1)

COM对象的实现由哪个DLL注册为该CLSID的“服务器”确定。因此,只需创建一个与错误修复相同的原始对象,然后注册它。