簡體   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