我有一个.tlb
文件,它COM
通过C#
DLL
. 我希望.tlb
在运行时加载它并在我的本机项目中使用这些功能。
虽然我可以使用LoadTypeLib
函数加载库,但我不确定ITypeLib
返回的内容如何帮助我使用.NET DLL
. 使用常规DLL
,我可以使用GetProcAddress
句柄DLL
并获取函数地址,但我认为它不适用于类型库?
那么,应该如何处理呢?
类型库不包含任何代码,它包含 API 的描述以及该 API 公开的对象、函数和其他类型。它可以描述一个标准的DLL及其函数,也可以描述COM对象,其中一些可以直接创建,另一些可以从其他函数或对象中获得。但它只包含一个描述。
通常,TLB 只在编译时才需要,因此编译器可以知道对象的类型并生成正确的代码来调用它们。您在运行时不再需要它。
这种方式类似于头文件。实际上,使用#import
实际上会自动生成一个头文件(查看您的构建目录以查看它),而这个头文件实际上就是编译您的应用程序所需的全部内容。因此,类型库(或多或少)相当于 COM DLL 的二进制格式头文件。
在运行时,不需要头文件,类型库也不需要。要根据是否安装有条件地使用对象,您可以按照与任何其他 DLL 基本相同的方式执行此操作。即,您查看是否安装了 DLL,如果没有,则不要尝试使用 DLL 代码。
对于 COM 对象,它可以更简单。尝试创建其中一个对象,如果失败,REGDB_E_CLASSNOTREG
则表示未安装 DLL(或未正确注册)。