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

Loading and using a type Library (.tlb) at runtime

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

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

那么,应该如何处理呢?

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

一般来说,TLB只在编译时才需要,这样编译器就可以知道对象的类型,并生成正确的代码来调用它们。您在运行时不再需要它。

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

运行时不需要头文件,也不需要类型库。要根据对象是否已安装有条件地使用对象,您可以使用与任何其他 DLL 基本相同的方式来执行此操作。 IE。您查看是否安装了 DLL,如果没有,则不要尝试使用 DLL 代码。

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