【问题标题】:Accessing classes that are in another DLL?访问另一个 DLL 中的类?
【发布时间】:2025-12-08 12:25:01
【问题描述】:

有没有办法从另一个 dll 中导出和使用类, 我有 2 个 dll,我正在尝试访问其间的类,想知道这是否可能。

【问题讨论】:

    标签: delphi dll delphi-2009


    【解决方案1】:

    有多种方法可以实现这一点,包括但不限于以下几种:

    1. 使用运行时包而不是 DLL。然后你可以使用来自另一个模块的任何类型、变量等。请注意,这会迫使您在所有模块中使用运行时包,并使用相同版本的 Delphi 编译所有模块。
    2. 继续使用 DLL,但通过接口而不是 Delphi 类访问类型。与类不同,接口可以跨 DLL 边界导出。
    3. 继续使用 DLL,但使用单位范围的过程和函数而不是类来访问类型。这将引导您进入与 Win32 界面性质相同的界面。

    在上述选项中,它们是按照方便性降序排列的。最方便的是使用运行时包,但这可能会给您带来不希望的约束,即所有模块都使用相同的 Delphi 版本编译。接口通常比 Win32 风格的接口更方便使用,但在设置这样的架构时可能会有更多的编程开销。您必须做出最适合您需求的选择。

    如果您可以避免使用单独的模块,并将所有内容构建到一个可执行文件中,那么这无疑是最方便的方法。

    【讨论】:

    • @David 感谢您的回答,我对使用接口更感兴趣,请您分享更多关于这种方法的信息。
    • 有多种选择。您可以导出创建和返回特定接口的函数。或者你可以全力以赴,编写一个 COM 服务器 DLL。
    最近更新 更多