如何在C#中使用非托管COM DLL而不引用

时间:2012-01-18 12:53:32

标签: c# dll com

我正在研究用C#编写DLL,作为其功能的一部分,它将利用第三方DLL中的方法。

用C ++编写的第三方COM DLL作为第三方应用程序的一部分在客户端计算机上注册。

现在,我可以在我的解决方案中包含(通过引用tlb文件)DLL并与之交互而没有任何问题。但是,DLL名称(不是方法签名等)每年都会更改,作为第三方合并的某些版本控制的一部分。另外,我无法分发第三方DLL(许可等)。

我基本上想要做的是在我的DLL中使用非托管COM DLL而不在我的解决方案中引用或包含DLL。

我正在寻找的是这个特定要求的一些好文章/例子。我已经看到很多用于通过文件名,托管COM等使用非托管DLL但这些不符合我想要实现的目标。

即使有人可以使用以下元素给我一个基本的例子,这将是一个很好的起点:

2 个答案:

答案 0 :(得分:2)

大多数COM服务器支持后期绑定。非常类似于在.NET中使用Reflection。您将使用Type.GetTypeFromProgID()和Activator.CreateInstance(Type)来创建COM对象。后期约束的主要缺点:

  • 您没有获得IntelliSense
  • 您所犯的任何错误都会产生运行时错误,而不是编译错误
  • 慢得多
  • 除非您可以使用C#版本4 动态关键字或使用VB.NET包装器,否则C#语法会很痛苦
  • 调试器无法显示COM对象的属性。你只看到一个不透明的__ComObject

但是,当供应商更新DLL时,您不必重新运行Tlbimp.exe。如果该更新中断,那么您将收到运行时错误而不是编译器诊断。总是痛苦的。

答案 1 :(得分:1)

互联网上有很多资源,这个blog post应该给你一个很好的起点。