关于dllimport:C#.net 4.0运行时加载TLB

Load TLB at runtime in C# .net 4.0

我有一个来自第三方库的 tlb 文件。这个库有很多版本,但是我在 tlb 中使用的函数是不变的,即不会从一个版本更改为下一个版本。

我已将 tlb 文件作为 COM 引用添加到项目中。我可以成功构建和调用第三方库中的函数。

当我部署我的应用程序时,我不能保证用户在他们的 PC 上安装的第三方版本与我相同。当出现这种情况时,一旦调用第三方库中的函数,他们就会收到访问冲突错误 (0xc0000005)。

如何在运行时加载位于用户 PC 上的 tlb 文件?


您应该能够使用 C# 4 的动态以及 Type.GetTypeFromProgID 来加载 COM 对象并通过动态绑定使用它。

1
2
3
4
 dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(comTypeName));

 // Use object via dynamic binding directly
 obj.Foo();

这避免了将有关 COM 对象版本的任何内容编译到您的程序集中的需要。只要您使用正确的 API,并且您使用的方法/等存在,它将适用于任何版本。