隨着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 上。