gpt4 book ai didi

c# - 如何在不引用的情况下在 C# 中使用非托管 COM DLL

转载 作者:行者123 更新时间:2023-11-30 22:32:03 26 4
gpt4 key购买 nike

我正在考虑用 C# 编写一个 DLL,作为其功能的一部分,它将使用第三方 DLL 中的方法。

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

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

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

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

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

最佳答案

大多数 COM 服务器都支持后期绑定(bind)。与在 .NET 中使用反射非常相似。您将使用 Type.GetTypeFromProgID() 和 Activator.CreateInstance(Type) 创建 COM 对象。后期绑定(bind)的主要缺点:

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

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

关于c# - 如何在不引用的情况下在 C# 中使用非托管 COM DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8910390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com