【发布时间】:2015-11-23 09:04:08
【问题描述】:
我有一个.tlb 文件,它通过COM 公开C# DLL 的功能。我希望在运行时加载这个.tlb 并在我的原生项目中使用这些函数。
虽然我可以使用LoadTypeLib 函数加载库,但我不确定返回的ITypeLib 如何帮助我使用.NET DLL 中的函数。使用常规的DLL,我可以将GetProcAddress 与DLL 句柄一起使用并获取函数地址,但我认为它不适用于类型库?
那么,应该如何处理呢?
【问题讨论】:
-
您是否想在运行时执行此操作,例如如果您正在创建脚本语言绑定?还是您只想在编译时执行此操作并能够在运行时使用对象?
-
我想看看是否存在
tlb,然后使用其中的对象,即需要在运行时做出使用其中的COM对象的决定。我希望避免将#import用于tlb,我认为这是使用它的标准方式。 -
对,但是你需要使用不同的 COM 对象吗?稍后创建,或者您要使用的 COM 对象集在编译时是已知的?
-
COM 对象,我想你的意思是我用 .tlb 导出的 .NET 接口?如果是这样,是的,我在编译时就知道这些。我会在编译时知道函数名和接口名。
-
然后我会使用
#import- 这是迄今为止最简单的方法。如果您事先不知道类型,则只需要在运行时使用类型库。如果您只想检查 DLL 是否存在(例如,如果它是可选组件或单独许可的插件),那么您可以使用任何合理的方法来执行此操作,包括尝试创建对象并捕获任何异常。