1. 程式人生 > WINDOWS開發 >在ubuntu 上使用wine 執行Delphi win32 應用

在ubuntu 上使用wine 執行Delphi win32 應用

隨著delphi 10.x 系列開始支援Linux 開發,我們的伺服器端可以直接支援LInux 伺服器了,

由於客戶越來越多使用Linux 作為伺服器端, 但是對於過去老的win32 下開發的服務端,一時半會還無法直接轉到移植到Linux 下,我們

需要一個過渡的方法,來保證服務端滿足要求。這時候需要使用wine 來實現這種轉換。Wine (“Wine Is Not an Emulator” 的首字母縮寫)

是一個能夠在多種 POSIX-compliant 作業系統(諸如 Linux,macOS 及 BSD 等)上執行 Windows 應用的相容層。

Wine 不是像虛擬機器或者模擬器一樣模仿內部的 Windows 邏輯,而是將 Windows API 呼叫翻譯成為動態的 POSIX 呼叫,

免除了效能和其他一些行為的記憶體佔用,讓你能夠乾淨地集合 Windows 應用到你的桌面。

更多關於wine 的介紹,請移步官網瞭解

首先,我們需要在ubuntu安裝 wine。這個很簡單

sudo apt install wine.

技術分享圖片

安裝完後,執行

wine --version

技術分享圖片

顯示執行成功。

我們先試著執行一個kbmmw 的smartbind 例子。因為裡面沒有網路和資料庫的功能。

在windows 下的介面為:

技術分享圖片

把這個exe 拷入到Linux 伺服器上,修改成可執行許可權。

在Linux 下執行·

wine Project1.exe

非常順利的執行了。

技術分享圖片

現在搞一下常用的比較麻煩的ADO 資料庫應用程式

我們先用delphi 建立一個ado 應用程式,訪問sql server 資料庫

技術分享圖片

技術分享圖片

這是一個標準的win32 ado 應用程式。在win10 下可以正常執行。

由於要使用win32 的API,我們使用標誌符,說明是win32 應用

WINEARCH="win32" wine Project3.exe

技術分享圖片

執行,出錯了

技術分享圖片

原因是沒有找到ado 相關的一些API。我們需要給wine 安裝ado驅動。

我們首先需要在微軟官網上下載MDAC

https://www.microsoft.com/zh-cn/download/details.aspx?id=5793

技術分享圖片

複製到linux 伺服器裡面

然後執行

WINEARCH="win32" winecfg

技術分享圖片

將這個地方修改成WINDOWS NT 4.0

技術分享圖片

點應用

然後再執行命令

WINEARCH="win32" wine MDAC_TYP.EXE

技術分享圖片

剩下的就和windows 下一樣的,一路安裝下去。

技術分享圖片

安裝完,點關閉。

再次開啟winecfg

WINEARCH="win32" winecfg

首先把wine 版本改回成win7

然後替換msado 函式

技術分享圖片

技術分享圖片

ok

現在執行命令

WINEARCH="win32" wine Project3.exe

技術分享圖片

程式跑起來了,但是,但是, 我的中文不顯示了。

技術分享圖片

我們再windows 目錄找到字型檔案simsun.ttc。

然後把此檔案複製到當前使用者的.wine 目錄,注意這個目錄是一個隱藏目錄。

技術分享圖片

技術分享圖片

注意上面的路徑。

現在我們再次執行

技術分享圖片

完美執行起來了。

當然此處建議win32 的資料庫驅動選擇使用unidac.使用直連方式,就不用這麼複雜了。

技術分享圖片

使用unidac 直連方式,就不需要上面的複雜配置,也不用顯式指明wine 的執行模式。直接實現了wine 的開箱即用,複製過來就可以執行。

命令更簡單了。

wine Project3unidac.exe

技術分享圖片

使用wine 執行windows 的應用程式,可以讓老程式執行在linux 下,但是開發新的桌面程式,還是建議使用Delphi FMX,這樣一套程式碼

和介面可以直接執行在windows、Linux、macos 上。