如何从 C# 转换新的 COM 对象

How to cast new COM objects from c#

我有一个用 C# (WCF) 制作的 Web 服务,它使用在 Visual Basic 6.0 中制作的 COM 对象。我已按照 this way 转换 COM 对象并使用我想要的功能。 最大的问题是visual basic .dll在不断变化(因为它正在开发和适应客户端)并且CLSID在不断变化。

这是代码。很简单,我只是投了 COM 并发送打印所有页面:

Printer print = new Printer(); //Where I Cast the COM Library
print.AllPages = 1; //its a parameter but i edited it so you can understand
return print.PrintPdf();

如何使此代码适应变化?有什么方法可以更改我的代码,这样我就不必删除引用、重新添加它并重建项目了吗?

谢谢

如果 COM-Object 支持后期绑定(什么,如果我没记错的话,每个 VB6 COM-Object 应该默认支持)你可以在不知道 CLSID 的情况下创建对象 compile-time通过 Activator.CreateInstance:

dynamic printer = Activator.CreateInstance(Type.GetTypeFromProgID("SisPrinter.Printer"));

printer.AllPages = 1;

printer.PrintfPdf();

后期绑定比早期绑定慢(通过在 Visual Studio 中添加引用),但甚至允许您调用此 COM-Object 的更高版本中引入的方法。它的主要目的是启用对脚本语言的支持。

您可以使用自 C# 4.0 起可用的 dynamic-Type,而不是针对导入的接口进行编码。就 software-architecture 而言,此方法不如添加静态引用好,但在您的界面稳定之前可能会对您有所帮助。