![](/img/trans.png)
[英]New Version of Third Party COM DLL - How to Install and Keep Old Versions in Delphi?
[英]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,這對我來說是一個過去的問題。
關於你的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.