在运行时加载和使用类型库(.tlb)

时间:2015-08-28 16:15:54

标签: c++ dll com tlbimp

我有一个.tlb文件,该文件通过COM公开了C# DLL的功能。我希望在运行时加载此.tlb并使用我的本机项目中的函数。

虽然我可以使用LoadTypeLib函数加载库,但我不确定返回的ITypeLib如何帮助我使用.NET DLL中的函数。通过常规DLL,我可以将GetProcAddressDLL句柄一起使用并获取函数地址,但我不认为它可以使用类型库?

那么应该如何处理这个问题呢?

1 个答案:

答案 0 :(得分:5)

类型库不包含任何代码,它包含API的描述以及该API公开的对象,函数和其他类型。它可以描述标准DLL及其功能,它还可以描述COM对象,其中一些可以直接创建,另一些可以从其他函数或对象获得。但它只包含描述

通常,TLB仅在编译时需要,因此编译器可以知道对象的类型并生成正确的代码来调用它们。在运行时你不再需要它了。

以这种方式,它类似于头文件。实际上,使用#import实际上会自动生成一个头文件(查看构建目录以查看它),这个头文件就是编译应用程序所需的全部内容。因此,类型库(或多或少)等效于COM DLL的二进制格式头文件。

在运行时,不需要头文件,也不是类型库。要有条件地使用对象取决于它们是否已安装,您可以使用与任何其他DLL基本相同的方式执行此操作。即你看看是否安装了DLL,如果没有,你不会尝试使用DLL代码。

对于COM对象,它可以更简单。尝试创建其中一个对象,如果您使用REGDB_E_CLASSNOTREG失败,则表示未安装DLL(或未正确注册)。