gpt4 book ai didi

delphi - dll 中的向后兼容性

转载 作者:行者123 更新时间:2023-12-03 15:58:48 27 4
gpt4 key购买 nike

我确实有三个 dll。

  • a.dll - 多年前发布
  • b.dll - 发布时间不长
  • c.dll - 即将发布

每个函数都包含相同的函数 - 不幸的是参数不同。所以我有以下方法

aMethod(param1)
aMethod(param1, param2)
aMethod(param1, param2, param3)

我的任务是制作一个向后兼容的新 dll(或多个新 dll)。但据我从 Google 了解到,不可能重载 dll 中的方法。

有人告诉我如何优雅地解决这个问题吗?

最佳答案

您可以重载 DLL 中的函数签名。但是,从 DLL 导出的函数名称必须是唯一的 - 这是 Windows 要求,而不是 Delphi 要求。因此,将 Delphi 中的函数声明为重载,但确保它们使用您定义的特定、唯一的名称导出。从新的一体化 DLL 导入的客户端将需要使用您定义的唯一名称进行导入。

Delphi 中的默认行为是通过函数名称导出导出函数,简单明了。如果您想做重载,您需要更多地参与并自己定义导出名称。

但请注意,这不会生成可放入需要 a.dll 的旧应用程序中的 DLL。此解决方案向后兼容源代码,但不向后兼容二进制文件。

您很可能无法创建与您过去的所有三个 DLL 版本二进制兼容的新 DLL,因为旧的 exe 二进制文件引用相同的函数名称,但期望不同的行为(不同的参数列表)。

另请注意,如果您的三个 dll 版本实际上具有不同的文件名(a、b、c),那么这一点就有点没有意义 - 静态函数绑定(bind)绑定(bind)到 dll 名称 + 函数名称。如果您希望新的 DLL 能够与旧的 exe 一起使用,您是否打算将新的 DLL 复制三次,分别命名为 a、b 和 c?这看起来很奇怪而且适得其反。就像睡狗一样,让旧的 DLL 躺着吧。除非你绝对必须修复一些严重的错误,否则不要管它们。

关于delphi - dll 中的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2950158/

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