繁体   English   中英

Delphi和dll版本

[英]Delphi and dll versions

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

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

欢迎来到DLL地狱!

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

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

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

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

有几种方法:检查动态链接库搜索顺序动态链接库重定向 最安全的是将所需的DLL放在应用程序可执行文件夹中,因为它是第一个检查的。 鉴于今天的磁盘大小,它可能不是磁盘空间问题。 DLL也可能不在进程之间共享,但这也不是问题。

关于你的libmysql DLL问题

这是博客文章的摘录

好吧,MySQL子版本的每个版本都会创建新的API版本和更改,因此对于5和5.1,您需要两个API绑定。 那不是全部。 在5.1上,每个子版本也会创建新的API更改,因此MySQL的每个版本(无论它有多小)都有不同的API。 这是维持与数据库通信的噩梦。

完整博客文章在这里

你不是一个人...

也许,一个解决方案可以是使用不需要dll的直接模式的MySQL devart驱动程序

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM