如何在没有引用的情况下在C#中使用非托管COM DLL

如何在没有引用的情况下在C#中使用非托管COM DLL,c#,dll,com,C#,Dll,Com,我正在研究用C语言编写DLL,作为其功能的一部分,它将使用第三方DLL中的方法 第三方COM DLL,用C++编写,作为第三方应用程序的一部分在客户端机器上注册。 现在,我可以在解决方案中包含(通过引用tlb文件)DLL并与之交互,而不会出现任何问题。但是,DLL名称(不是方法签名等)每年都会更改,这是第三方合并的某些版本控制的一部分。此外,我无法分发第三方DLL(授权等) 我基本上想做的是在我的DLL中使用非托管COM DLL,而不在我的解决方案中引用或包含DLL 我要找的是一些关于这个特定需

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

第三方COM DLL,用C++编写,作为第三方应用程序的一部分在客户端机器上注册。 现在,我可以在解决方案中包含(通过引用tlb文件)DLL并与之交互,而不会出现任何问题。但是,DLL名称(不是方法签名等)每年都会更改,这是第三方合并的某些版本控制的一部分。此外,我无法分发第三方DLL(授权等)

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

我要找的是一些关于这个特定需求的好文章/例子。我已经看到了很多使用非托管DLL的文件名,托管COM等,但这些不符合我试图实现


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

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

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

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

但其优点是,当供应商更新DLL时,您不必重新运行Tlbimp.exe。如果更新被破坏,那么您将得到一个运行时错误,而不是编译器诊断。总是很痛苦。

Try-免费注册的COM InterSphere是该文章的英文版本:。我已经遇到过这个问题,但我们无法控制第三方dll的发行或源代码。我读过类似的文章,但这并不完全是我的目标。我们不知道第三方DLL将安装在哪里。谢谢,这正是我要找的。我尝试了以下代码:
Type ObjectType=System.Type.GetTypeFromProgID(“thirdPartyDell.Object”);object ThirdPartyDLLObject=System.Activator.CreateInstance(ObjectType)并按预期生成对象。我使用VisualStudio附带的OLE/COM对象查看器工具获得了ProgID。只是附带说明一下,我发现创建的对象类型是“System.\uuuuuuucomObject”。