【发布时间】:2021-05-31 01:14:16
【问题描述】:
我在尝试接下来的事情时非常挣扎。
我目前正在使用 ActiveX,通过 Visual Studio 生成的互操作 dll(更准确地说是 tlbimp,隐式)。
存在此 ActiveX 的不同版本,有时会在接口中添加、删除属性。如果要改版本,就得改引用,重新编译等等。
我想要我的代码的单一版本。我记得以驱动 Word 为例,可以通过 Word.Application 上的 CreateInstance 实例化一个单词对象,并调用方法,无论版本如何。仅在运行时链接调用。我想对我使用的 activeX 做同样的事情,但我真的不知道该怎么做(顺便说一句,它是 sage objets100c dll)。我在 ActiveX 列表中找不到它,因此我什至不确定我是否可以为 Word.Application 做这样的事情。
有人知道我该怎么做吗? (可能是一个完全不同的解决方案,因为我的需要是:拥有一个无需重新编译的代码)。
提前谢谢你
【问题讨论】:
-
您可以使用 C#
dynamic关键字:docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/… 但如果您经常使用该库,可能会很痛苦。否则,您可以使用最低版本的 TLB 作为基础,仅在使用较新的属性/方法时使用动态。 -
@SimonMourier Merci Simon :) 我不能使用 tlb 作为基础,因为 v2(例如)向枚举添加了新值、接口中的新方法等等,(并且有人删除了他们)使他们不兼容。我找到了另一种方法,通过代码反映 interop dll 以使用动态对象生成一种中间层。如果可以的话,我很荣幸你回答了我的问题,我过去很多时间都在不同的个人项目中使用过你的 HAP 库,它非常有用。
标签: c# .net com activex sage-erp