在C#中使用TLB(和tlbimp.exe)的缺点

时间:2012-05-01 15:09:17

标签: c# pinvoke com-interop tlbimp typelib

我们正在将通信公司的软件集成到我们自己的软件中,用于接听电话,转接电话,与客户匹配号码等。

他们向我们提供了API文档,其中包含一个TLB文件。我们已经使用tlbimp工具创建了一个我们现在想要在实现中使用的程序集。

tlbimp创建的一些类已经被赋予了内部构造函数,使它们不可实现。我认为在这个实例中应该没问题,因为另一个类应该返回这些类的实例。

这让我想到:在使用tlbimp.exe和TLB作为一个整体时,我是否应该注意其他任何陷阱?手动创建DllImport / ComImport / PInvoke代码会更好吗?

2 个答案:

答案 0 :(得分:2)

一般来说,如果你有一个TLB,我至少会通过消耗tlbimp生成的程序集开始我的工作。

该工具本身被广泛使用,并根据TLB中提供的定义生成正确的代码。我已经看到了一些情况,结果代码是不正确的,但它几乎总是回到一个非常复杂的数组编组情况或TLB作者只是添加了错误的COM注释的地方。

如果您确实发现任何问题,那么您应该考虑开始手动修改修补程序。但我当然不会那样开始。

答案 1 :(得分:2)

您无法调用类型库中声明的COM接口方法。实现COM服务器的DLL不会导出方法。您可以使用后期绑定与反射或动态关键字,但这很痛苦且容易出错。使用导入库,这就是它存在的原因。