歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 利用Kylix3從Windows遷移到Linux

利用Kylix3從Windows遷移到Linux

日期:2017/2/27 14:13:59   编辑:更多Linux

簡介

使用象 Borland? Delphi 7? Studio 這樣的工具和 IBM? DB2? Universal Database? 這樣的數據庫的優越性之一就在於,平台之間的遷移只需要進行少量更改和一次重新編譯。在本系列文章的第一篇中,我用 Delphi 7 Studio 創建了一個連接到 IBM DB2 UDB 的應用程序,在我的第二篇文章中,我給這個應用程序添加了更多功能,如主從復合結構(master-detail)形式的報告,以使它更有趣和有用。既然我已經創建了一個可執行的應用程序,就讓我們繼續前進並且來個大跨越,使用 Borland Kylix? 3 將它從運行於 Microsoft? Windows? 上的 Delphi 7 應用程序轉變為 Linux? 應用程序。

利用 Kylix 3 遷移到 Linux 相當容易,Borland Kylix 3 是一個用於 Linux 開發的快速應用程序環境。Kylix 使用 Delphi 7 Object Pascal(和 C++)作為開發語言,並且使用了用於 Linux 的為大家所熟悉的 RAD 環境。Borland 工具提供的最大優點之一在於,遷移一個應用程序與其說是“移植”項目,還不如說是重新編譯 Windows/Delphi(或 Linux/Kylix)項目。

當利用 Kylix 重新編譯應用程序,以將它從 Windows 和 Delphi 7 遷移到 Linux 時,有幾點必須牢記。首先,Kylix 的所有版本都包含 TSQLClientDataSet 組件,Delphi 6 也有該組件,但是在 Delphi 7 中不鼓勵使用它,並用 TSimpleDataSet 取代了它。盡管這看起來似乎不是大問題,但是一旦您意識到它是一個問題時,這就意味著只能使用 Delphi 7 編譯 TSimpleClientDataSet,而只能用除 Delphi 7 以外的其它工具編譯 TSQLClientDataSet.

將應用程序從 Windows 遷移到 Linux 涉及到獲取源文件以及將它們從 Windows 傳送到 Linux 文件系統。在 Linux 上,文件名(和單元名)是區分大小寫的,因此,如果您添加了一些自己的單元,則必須要小心(Delphi 7 將確保所有單元和文件名都是在注意區分大小寫的情況下命名的)。但是,您不必將所有項目文件都從 Delphi 轉移到 Kylix.特別是包含特定於 Windows 選項的 .cfg 和 .dof 文件。Kylix 將把這些文件作為 .conf 和 .KOF 文件重新生成。簡而言之,您只需將主項目文件(。dpr 和 .res)和單元文件(。pas 和 .xfm)從 Windows 傳送到 Linux(本文使用的代碼文件可在文章的結尾獲得)。

Linux 上的 DB2

除了在 Linux 上使用 Kylix 之外,我們還必須連接到 Linux 上的一個 DB2 版本(當然,您也可以始終與其它平台上的 DB2 數據庫連接)。一點提示:我已嘗試了使用 DB2 通用數據庫 Personal Edition v7.x,但是遇到一個錯誤消息:SQL Error: Error mapping failed.其他一些使用過 dbEXPress 和 Kylix 的人已經報告了這個消息,在這種情況下,只要確保在 Linux 上使用最新的 DB2 版本(即 v8.1 beta 測試版,可從 IBM 網站下載)就可解決這個問題。

少量的源代碼更改

將源文件從 Windows 遷移到 Linux 後,在 Kylix 中打開項目(請參閱圖 1)。當打開項目並在 Object Inspector 中查看 SQLConnection 特性時,您會看到兩個特定於 Win32 而無法在 Linux 上使用的特性值:LibraryName(設置為 DBEXPDB2.DLL)和 VendorLib(設置為 db2cli.dll)。Linux 沒有 DLL;它使用 .so 文件來代替。要更改這些值,您必須先為 ConnectionName 特性選擇另一個值,然後再重新選擇 DB2Connection 作為 ConnectionName.這將把 LibraryName 設置為 libsqldb2.so.1,並把 VendorLib 設置為 db2cli.dll.

好消息是當您將項目從 Windows 上的 Delphi 遷移到 Linux 上的 Kylix 時,只需更改這兩個特性。壞消息是必須手工完成。每當某個平台上進行了新的更改時就必須手工執行上述更改,這不是您希望做的。又一個好消息是,通過在窗體的 OnCreate 事件處理程序中編寫一些代碼,並將正確的值賦給 LibraryName 和 VendorLib(以及主窗體的 Caption),我們可以解決這個問題,如下所示:

procedure TForm1.FormCreate(Sender: TObject); begin {$IFDEF MSWINDOWS} Caption := 'Delphi 7 talking to DB2 using dbExpress'; SQLCOnnection1.LibraryName := 'DBEXPDB2.DLL'; SQLCOnnection1.VendorLib := 'db2cli.dll'; {$ENDIF} {$IFDEF LINUX} Caption := 'Kylix 3 talking to DB2 using dbExpress'; SQLCOnnection1.LibraryName := 'libsqldb2.so.1'; SQLCOnnection1.VendorLib := 'libdb2.so'; {$ENDIF} cdsEMPLOYEE.Open; cdsEMP_ACT.Open; cdsEMP_PHOTO.Open; cdsEMP_RESUME.Open end;

注:我們不能簡單地在第一個 {$IFDEF} 之後添加 {$ELSE},因為 Linux 不再是 MSWINDOWS 的唯一替代平台,現在,Delphi 7 Studio(在用於 .NET 的預覽版命令行編譯器中)還支持 CLR 作為平台。

另一個您必須檢查的特性是 TSQLMonitor 組件的 FileName 特性,例如,它不應當使用 / 或 \ 字符,而應指向一個文件名。最後還應說明,MidasLib、dbExpDB2 和 CrtL 單元在 Linux 上不可用,因此您必須利用 Midas.so 和 dbexpdb2.so 庫來部署可執行文件。

當您 Windows 和 Linux 上擁有了單一源項目後,您可以在 Delphi 或 Kylix 中進行工作(這會導致項目源代碼進行復雜合並),或者在一個環境中工作而只在另一個環境中重新編譯。就個人而言,我一直都在 Windows 上使用 Delphi IDE 設計我的應用程序,然後把它傳送到 Linux 上並用 Kylix 重新編譯。這樣,我可以讓 SQLConnection 組件指向 DB2 的 Windows DLL(而不是 Linux .so 庫)。

結束語

有了 Delphi 7 或 Kylix 3 和 DB2,在構建 Linux 應用程序時,您就不必因為工具或數據庫的可用性而受困於某一個平台,或者犧牲 RAD 環境。在我的下一篇文章中,我將結合 dbExpress 數據訪問層來使用 Delphi WebSnap 組件,以構建帶有 DB2 後端的 Web 服務器應用程。




Copyright © Linux教程網 All Rights Reserved