Delphi和dll版本

时间:2009-09-14 10:28:22

标签: delphi dll

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

我们有许多应用程序使用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 ......

4 个答案:

答案 0 :(得分:4)

欢迎来到DLL地狱!

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

但是,请检查旧应用程序是否将使用新的5.1版本运行。有时,这只会工作,因为DLL的足迹没有改变,只是内部的代码。如果它们崩溃了,你需要保留两个不同的版本。

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

如今,我使用SQL Server,这对我来说是一个过去的问题。

答案 1 :(得分:4)

有几种方法:检查Dynamic-Link Library Search OrderDynamic-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);

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