我正在使用一个COM DLL,annoyling已将其中一个方法签名从Foo(ref ushort bar)
更改为Foo(ref short bar)
,具体取决于用户安装的任何版本。
性能至关重要,但我想不出任何不涉及反射的解决方案。有没有人有任何想法?
答案 0 :(得分:2)
DLL打破了interface immutability的COM原则:
COM接口是不可变的。您无法定义旧版本的旧版本并为其指定相同的标识符。添加或删除接口的方法或更改语义会创建新接口,而不是旧接口的新版本。因此,新接口不能与旧接口冲突。但是,对象可以同时支持多个接口,并且可以使用不同的标识符公开作为接口的连续修订的接口。因此,每个接口都是一个单独的契约,系统范围的对象无需关心它们所调用的接口版本是否是他们期望的版本。接口ID(IID)明确且唯一地定义接口契约。
这不是'讨厌'。这是已损坏。 DLL作者必须使用新签名定义 new 接口。