2011-04-17 117 views
33

我們公司有一個已經開發了10多年的軟件,所以那裏有一些非常過時的東西。它仍然功能強大,但是我看到了Delphi XE的新功能,這讓我想要切換。問題在於源代碼本身超過300MB的.pas文件(總共包含1gb的組件等)。將項目從Delphi 7遷移到Delphi XE有多難?

我們正在使用自定義組件,舊的jvcl的東西和最新的devexpress。

如果我決定從Delphi 7遷移到Delphi XE,那麼我可以期待些什麼?

謝謝。

+3

它應該很容易,它會花費你的時間,因爲你的項目很大 – 2011-04-17 17:27:30

+0

這就是主觀的問題。是的,這很難,但不,沒有太多。 – user422039 2011-04-17 21:41:18

+0

@ user422039 - 我想是的,但這裏的答案幫了我很大的忙,當轉換時間到來時,我會更好地做好準備。謝謝大家。 – Rosenberg 2011-04-17 22:50:55

回答

28

唯一真正的問題是轉換爲Unicode。您應該瞭解在Delphi中如何實現Unicode支持 - 從Marco Cantu開始White Paper: Delphi and Unicode

無法估計在不知道實際代碼的情況下將舊應用程序升級到Unicode所需的工作量。如果您以標準方式使用字符串類型,轉換將很容易。任何使用字符串類型的低級技巧(比如將二進制數據存儲在字符串中)現在都被棄用,並且對應的代碼應該被重寫。

+1

哇,非常豐富,謝謝! – Rosenberg 2011-04-17 19:01:09

15

一些小工具可以遷移而不需要做任何修改,或者只需要一些unicode修復就可以運行。但是,如果你的代碼庫像你解釋的一樣龐大,你就不應該完全依賴這裏的任何人告訴你。只需獲取XE的副本並加載代碼即可。看看你遇到了什麼問題,以瞭解它將要付出的努力量。

在這一刻我已經將我的所有代碼移植到XE(甚至是舊項目)。我儘可能多地重複使用相同的庫,所以一旦我轉換了大部分這些庫,將Delphi 7中的應用程序「移植」到Unicode Delphi通常只是處理庫中更新接口的重複任務,或者修復編譯器錯誤和警告。

,我已經遇到的最常見錯誤:

  • Unicode的東西。這將需要90%的時間。如果代碼執行很多低級字符串處理,這很煩人,但是通過添加一些類型轉換可以輕鬆解決大多數問題。

  • 當您使用c in ['a'..'z']時,編譯器會發生錯誤。你應該使用CharInSet()作爲unicode字符串。

  • 如果設置了ShortDateFormat,則會得到一個編譯器警告,您應該使用FormatSettings.ShortDateFormat代替。在新代碼中,這是一個好主意。如果你正在移植,如果你只想開始,最初就忽略它。

此外,你可能會升級你的第三方庫到更新的版本,所以你不必自己移植那些。對於那些已經改變了界面或工作方式的人來說並不鮮見,所以我會下載一些試用版來看看有什麼變化。

+0

謝謝,那麼我會面對很多人。我只是在尋找,因爲那樣我們就不得不購買Delphi XE。 – Rosenberg 2011-04-17 19:36:03

5

我的項目大約有一百萬行代碼,我最近從CB9移植到XE。爲了減少工作量,我首先重寫了很多,所以我不再依賴第三方組件包,然後仔細檢查所有與字符串相關的(unicode),然後才移動到XE。準備工作很多,實際的端口比較容易。

+0

啊,這是個好主意,我的規模也很大。我面臨的最大問題是自定義組件,它們是專門爲Delphi 7製作的,它們是常用控件(編輯版本,標籤,按鈕等)的變體。自定義組件的最大原因是添加一個屬性,從sql中讀取它們的標題,這是作爲本地化度假區實現的,我相信這是一個過時的日期。 – Rosenberg 2011-04-17 19:05:31

+0

根本不會有問題 – 2011-04-17 21:34:52

+0

別擔心,Delphi自己的定位技術在D7之後被破壞,直到XE才被修復。在這方面,你沒有錯過任何新東西。 – 2011-04-18 13:39:13

6

你在你的回覆評論中提到了SQL ......你的數據庫是否支持unicode?如果沒有,你可能會做很多工作。您可能需要即時轉換數據庫或爲您的用戶製作轉換工具。您可能需要升級數據庫,甚至切換到其他位置。例如,DBISAM不支持unicode,但供應商使ElevateDB是。過渡不是微不足道的。還有一些其他類似Hyperstring的庫,主要用匯編編寫,是另一個痛處。

+0

我正在使用Microsoft SQL Server 2008 SQL_Latin1_General_CP1_CI_AS,我不認爲我應該面臨與它的問題,我應該嗎? – Rosenberg 2011-04-17 19:32:21

+0

您不必強制將數據庫更改爲Unicode(只要您不需要存儲整個Unicode集)。數據庫客戶端和驅動程序會來回轉換,但要小心寫出可以毫無損失地轉換的內容,只要您使用LATIN1即可。 許多Delphi程序員錯過了許多數據庫不在應用程序私有控制之下。它們是許多應用程序使用的公司數據,應用程序必須符合數據庫設計,而不是反之。 – 2011-04-18 13:35:44

6

我已經做了很多轉換。

你應該準備好讓你當前的代碼基礎可測試。最好使用自動化單元測試,但至少有一個好的最終用戶測試計劃。

然後你應該計劃最大的部分:你的應用程序和數據庫的Unicode轉換。

最後有以下長,但可能非常耗時方面:

  • 如果你使用BDE,這是擺脫它的時候
  • 德爾福XE比Delphi 7中更嚴格
  • 是撞了好幾個版本,而且通常比VCL遠不如向後兼容的第三方庫的版本是

當你把它移植,現在是時候改變的東西:既然你已經看到了整個代碼庫,現在你知道你的弱點在哪裏,所以你可以開始重構它們並獲得比以前更好的應用程序。

0

對於這個MIGRATION執行來說,這絕對是一個挑戰。但需要良好的規劃!

我們首先需要找到所有可能的組件,這些組件也需要與代碼一起移植。如果在Delphi7項目中使用的第三方組件不可用,那麼進一步研究它很複雜。其次,與Unicode相關的其他類型轉換很容易。 最後,我們需要獲得其他支持庫,BDE和數據庫適配器。

對於豐富的用戶界面,可以使用Delphi FireMonkey

Delphi越來越好,因爲它現在支持從桌面到Web到移動應用程序的開發。