3

我有一个.tlb文件,它COM通过C# DLL. 我希望.tlb在运行时加载它并在我的本机项目中使用这些功能。

虽然我可以使用LoadTypeLib函数加载库,但我不确定ITypeLib返回的内容如何帮助我使用.NET DLL. 使用常规DLL,我可以使用GetProcAddress句柄DLL并获取函数地址,但我认为它不适用于类型库?

那么,应该如何处理呢?

4

1 回答 1

5

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

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

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

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

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

于 2015-08-29T08:39:25.617 回答