在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 上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM