首先,请原谅我,如果这是一个小学生的问题:)
我们有许多应用程序使用Delphi dbxpress来访问MySQL 5服务器。这些应用程序都是在Delphi 2007上针对libmysql.dll版本5.0.xx编写的(实际版本已被遗忘)
此dll已分发给所有用户,并且工作正常。
我刚刚升级到Delphi 2010并发现需要用户libmysql 5.1.xx来查看MySQL服务器。
麻烦的是,如果我用新的替换5.0.xx libmysql,现有的应用程序将无法启动。另一方面,Delphi 2010不适用于较旧的DLL。
虽然我可以通过将相应的dll版本放在应用程序的\ bin文件夹中来获得IDE(2007和2010)的两个版本来使用数据库,但这并不能解决用户的问题。
有关如何让应用程序查找适当版本的dll的任何建议。
我们希望不必立即将所有应用程序移至Delphi 2010 ......
答案 0 :(得分:4)
欢迎来到DLL地狱!
要解决此问题,您需要将5.1版本安装在5.0版本的不同文件夹中,并确保每个应用程序都会查看要使用的正确版本。因此,您不能仅使用新版本替换旧版本。
但是,请检查旧应用程序是否将使用新的5.1版本运行。有时,这只会工作,因为DLL的足迹没有改变,只是内部的代码。如果它们崩溃了,你需要保留两个不同的版本。
过去,我只是通过将MySQL DLL复制到应用程序的二进制文件夹来解决这个问题。这样,我可以支持多个MySQL版本。如果你足够小心的话,这是行不通的,但它可以奏效。
如今,我使用SQL Server,这对我来说是一个过去的问题。
答案 1 :(得分:4)
有几种方法:检查Dynamic-Link Library Search Order和Dynamic-Link Library Redirection。 最安全的是将所需的DLL放在应用程序可执行文件夹中,因为它是第一个检查的。鉴于今天的磁盘大小,它可能不是磁盘空间问题。 DLL也可能不在进程之间共享,但这也不是问题。
答案 2 :(得分:1)
关于你的libmysql dll问题
以下是博文
的摘录好吧,MySQL的每一个版本 子版本创建新的API版本和 变化,所以5和5.1你需要两个 API绑定。那不是全部。在5.1上, 每个子版本也会创建新的API 变化,所以每个版本(无论如何 有多小的MySQL有一个 不同的API。那是一场噩梦 与...保持沟通 数据库中。
完整博文here
你并不孤单...
也许,解决方案可以是使用不需要dll的MySQL devart driver with direct mode
答案 3 :(得分:0)
我所做的是将文件重命名为libmysql5.1.51.dll,并将其放在应用程序启动文件夹中。我的SqlLibraryInit()代码包括:
const lib = 'libmysql5.1.51.dll';
...
libmysql_fast_load(lib);
这样,通过更改常量,我可以加载我想要使用的任何构建。