【问题标题】:use lib file in delphi. how to import lib file在delphi中使用lib文件。如何导入lib文件
【发布时间】:2011-12-21 10:21:53
【问题描述】:

我有一个用于 lib 文件的 API。 使用该 lib 文件提供了 .h 文件。 现在我想在 Delphi 中调用 lib 文件,并使用它的功能。

lib 文件如何连接到 Delphi?

更新:好的分配工作需要解决,如果我得到一个 dll 怎么办?我如何将其链接到 Delphi?

【问题讨论】:

    标签: delphi delphi-2009


    【解决方案1】:

    您不能使用 lib 文件从 Delphi 链接到 DLL。 .lib 文件将由 DLL 的 C 或 C++ 客户端使用。

    在 Delphi 中,您需要使用 external 关键字手动将 .h 头文件转换为 Pascal 导入单元。 Delphi 源代码中的 Windows.pas 单元的一个示例。不能使用 .lib 文件这一事实其实不是什么大问题,因为无论如何都必须翻译 .h 文件。

    【讨论】:

    • 此答案假设已编译的 DLL 文件可用于关联的 LIB 文件。事实上,可以将某些东西编译为 LIB 文件或 DLL 文件。如果有 DLL 文件,只需转换相关的头文件 (.H) 就足够了。但是,如果代码仅在 LIB 文件中可用,则需要将源代码完全转换为 Delphi(如果可用)才能在 Delphi 中使用。也就是说,很遗憾,Delphi 不支持 .LIB,而许多其他编译器已经支持它很长一段时间了。
    • @glen 链接到静态库,您可以使用 C 编译器将库链接到 dll 中
    • @David:Afaik 这些符号不会用导出标志声明,因此不可见?
    • @marco 您需要使用 .def 文件重新导出它们
    【解决方案2】:

    在某些情况下,可以使用对象文件转换器等工具从 Agner Fog(参见 http://www.agner.org/optimize/?e=0,34,36)提取 .lib 文件的成员到 .obj 文件。

    语法是

    objconv.exe libname.lib -lx

    提取所有成员。

    通过提取所有成员,您可以确保没有成员丢失。但是,如果还有其他依赖项(对其他 .lib 文件),这些将无法解析,必须手动解析。

    还需要翻译头文件。

    注意:目标文件格式也可以转换。 Delphi 只理解 OMF,而 Intel 编译器(例如)只输出 COFF。因此需要进行转换,也可以通过工具完成。

    如前所述,这仅在某些情况下有效,并且肯定需要该领域的一些专业知识,因为编译器不会对错误消息提供太多帮助(通常这些消息令人恼火和误导)。

    【讨论】:

    • "Delphi 只理解 OMF" - 自 2011 年发布的 Delphi XE2 起,可以链接 COFF .obj 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2019-11-10
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    相关资源
    最近更新 更多