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

use*_*240 3 c++ com dll tlbimp

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

虽然我可以使用LoadTypeLib函数加载库,但我不确定ITypeLib返回如何帮助我使用函数.NET DLL.用常规的DLL,我可以用GetProcAddressDLL手柄和获取函数的地址,但我不认为它会与类型库工作?

那怎么接近呢?

Ben*_*Ben 5

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

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

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

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

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