gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:38:15 24 4
gpt4 key购买 nike

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

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

那么,应该如何处理呢?

最佳答案

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

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

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

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

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

关于c++ - 在运行时加载和使用类型库 (.tlb),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com