我有来自第三方库的tlb文件。这个库有很多版本,但是我在tlb中使用的函数是常量,即不要从一个版本更改为下一个版本。
我已将tlb文件作为COM参考添加到项目中。我可以成功构建并调用第三方库中的函数。
当我部署我的应用程序时,我无法保证用户将在PC上安装与我相同版本的第三方。出现这种情况时,只要调用第三方库中的函数,就会出现访问冲突错误(0xc0000005)。
如何在运行时加载位于用户PC上的tlb文件?
答案 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存在,它将适用于任何版本。