在c#中处理具有不同签名的COM dll

本文关键字:COM dll 处理 | 更新日期: 2023-09-27 18:05:30

我正在使用一个COM DLL,根据用户安装的任何版本,恼人地将它的一个方法签名从Foo(ref ushort bar)更改为Foo(ref short bar)

性能是至关重要的,但我想不出任何不涉及反射的解决方案。有人有什么想法吗?

在c#中处理具有不同签名的COM dll

DLL违背了COM的接口不变性原则:

COM接口是不可变的。您不能定义旧接口的新版本并为其提供相同的标识符。添加或删除接口的方法或更改语义将创建新接口,而不是旧接口的新版本。因此,新接口不能与旧接口冲突。但是,对象可以同时支持多个接口,并且可以公开具有不同标识符的接口的连续修订版。因此,每个接口都是一个单独的契约,并且系统范围的对象不需要关心它们所调用的接口的版本是否为它们所期望的版本。接口ID (IID)明确且唯一地定义了接口契约。

这不是"烦人"。这是破碎的。DLL作者必须定义一个新的接口,使用新的签名。