在运行时在C#.net 4.0中加载TLB

时间:2012-08-07 22:10:28

标签: c# dllimport typelib tlbimp

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

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

当我部署我的应用程序时,我无法保证用户将在PC上安装与我相同版本的第三方。出现这种情况时,只要调用第三方库中的函数,就会出现访问冲突错误(0xc0000005)。

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

1 个答案:

答案 0 :(得分:1)

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

 dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(comTypeName));

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

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