【问题标题】:Delphi and dll versionsDelphi 和 dll 版本
【发布时间】:2009-09-14 10:28:21
【问题描述】:

首先,如果这是一个男生的问题,请原谅我:)

我们有许多应用程序使用 Delphi dbxpress 来访问 MySQL 5 服务器。这些应用程序都是在 Delphi 2007 上针对 libmysql.dll 版本 5.0.xx 编写的(实际版本忘记了)

此 dll 已分发给所有用户,并且工作正常。

我刚刚升级到 Delphi 2010,发现需要用户 libmysql 5.1.xx 才能看到 MySQL 服务器。

问题是,如果我将 5.0.xx libmysql 替换为较新的 libmysql,现有的应用程序将无法启动。另一方面,Delphi 2010 不适用于旧版 dll。

虽然通过将适当的 dll 版本放在应用程序的 \bin 文件夹中,我可以让 IDE 的两个版本(2007 和 2010)与数据库一起使用,但这并不能解决用户的问题。

关于如何让应用程序查找适当版本的 dll 的任何建议。

我们希望不必立即将所有应用程序迁移到 Delphi 2010...

【问题讨论】:

    标签: delphi dll


    【解决方案1】:

    有几种方法:检查Dynamic-Link Library Search OrderDynamic-Link Library Redirection。 最安全的方法是将您需要的 DLL 放在应用程序可执行文件夹中,因为它是第一个检查的。鉴于今天的磁盘大小,它可能不是磁盘空间问题。 DLL 也可能不在进程之间共享,但这也不是问题。

    【讨论】:

    • 这就是我想要的!至少我们可以将新应用程序的 dll 粘贴到它们本地,直到我们正式迁移旧的东西:)
    • 好电话!我忘记了加载顺序。 :-)
    【解决方案2】:

    欢迎来到 DLL 地狱!

    要解决此问题,您需要将 5.1 版本安装在与 5.0 版本不同的文件夹中,并确保每个应用程序都使用正确的版本。因此,您不能只用新版本替换旧版本。

    但是,请检查旧应用程序是否可以使用新的 5.1 版本运行。有时,这只是工作,因为 DLL 的足迹没有改变,只是里面的代码。如果它们确实崩溃了,您需要维护两个不同的版本。

    过去,我只是通过将 MySQL DLL 复制到应用程序的二进制文件夹来解决这个问题。这样,我可以支持多个 MySQL 版本。这不实用,但如果你足够小心,它可以工作。

    现在,我使用 SQL Server,所以这对我来说是过去的问题。

    【讨论】:

    • 谢谢,我想核心问题是如何让新应用程序在 System32 以外的地方寻找 dll(例如,我们更容易告诉新的 Delphi 2010 应用程序使用本地 bin 文件夹)
    • 是的。不幸的是,虽然我仍然使用 Delphi 2007,但我从未安装过 DBExpress 组件,也没有使用 MySQL。但基本上,您需要在系统上的不同文件夹中维护这两个版本。
    【解决方案3】:

    关于你的 libmysql dll 问题

    这是一篇博文的摘录

    嗯,每个版本的 MySQL sub-version 创建新的 API 版本和 更改,因此对于 5 和 5.1,您需要两个 API 绑定。那不是全部。在 5.1 上, 每个子版本还创建新的 API 变化,所以每个版本(无论 它有多小)的 MySQL 有一个 不同的API。这是一场噩梦 与对方保持沟通 数据库。

    完整的博文here

    你并不孤单……

    也许,一个解决方案可以是使用不需要 dll 的MySQL devart driver with direct mode

    【讨论】:

      【解决方案4】:

      我所做的是将文件重命名为 libmysql5.1.51.dll,并将其放在应用程序启动文件夹中。我的 SqlLibraryInit() 代码包括:

      const  lib = 'libmysql5.1.51.dll';
      ...
      libmysql_fast_load(lib);
      

      这样,通过更改常量,我可以加载我想使用的任何构建。

      【讨论】:

        猜你喜欢
        • 2013-03-29
        • 1970-01-01
        • 2010-11-08
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 2012-07-28
        • 1970-01-01
        相关资源
        最近更新 更多