4

我需要PDFCreator COM interface从 C# 应用程序连接到。为此,我使用 VS 生成的 Interop 包装器。但是有些客户有不同版本的 PDFCreator(我有 1.2.1,有些有 1.4.3),如果我使用为 1.2.1 生成的互操作,我在使用包装器时会出现异常。有没有办法解决?那么我的应用可以支持多个版本的 PDFCreator 吗?

另外,我不确定 PDFCreator 界面是否真的改变了。是不是对 COM 对象的确切版本有一些锁定,我可以在生成互操作库时简单地关闭?谢谢你。

4

2 回答 2

8

所以,根据 yms 的回答,我找到了正确的方向:)

.NET 4.0 支持与 VB 类似的后期绑定 COM 对象,使用System.Type和 magicdynamic关键字。

如何使用动态绑定运行 PDFCreator 的简单示例:

    System.Type pdfCreatorType = System.Type.GetTypeFromProgID("PDFCreator.clsPDFCreator");
    dynamic comPdfCreator = System.Activator.CreateInstance(pdfCreatorType);

    comPdfCreator.cStart("", true);

这就像一个魅力,你不需要为每个新的 PDFCreator 版本重新编译你的互操作程序集。

于 2013-03-27T21:57:11.830 回答
0

如果您不怕使用 VB.Net 而不是 C#,您可以尝试将旧的 VB 后期绑定功能与 PDFCreator 的 progid 一起使用。

创建新实例的代码如下所示:

Dim myObj As Object
myObj = CreateObject("PDFCreator.clsPDFCreator")

然后您可以调用方法myObj,但缺点是 IntelliSense 将不起作用,并且如果您调用不存在的方法或使用错误的参数,VB.Net 编译器不会引发任何错误。

免责声明:我没有对此进行测试,使用它需要您自担风险

于 2013-03-27T20:35:17.020 回答