利用 Kylix3 從 Windows 遷移到 Linux(轉)

BSDLite發表於2007-08-15
利用 Kylix3 從 Windows 遷移到 Linux(轉)[@more@]  簡介

  使用象 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。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-959209/,如需轉載,請註明出處,否則將追究法律責任。

相關文章