web-dev-qa-db-ja.com

Delphi 7からDelphi XEにプロジェクトを移行するのはどれほど難しいですか。

私たちの会社には10年以上開発されているソフトウェアがあるので、そこには本当に時代遅れのものがいくつかあります。それはまだかなり機能的ですべてですが、Delphi XEの新機能を見て、切り替えたくなります。問題は、ソースコード自体が300 MB以上の.pasファイル(コンポーネントを含めて合計1 GB)であることです。

カスタムコンポーネント、古いjvclのもの、最新のdevexpressを使用しています。

Delphi 7からDelphi XEへの移行を決定した場合、どれほど困難になると予想できますか?

ありがとうございました。

35
Rosenberg

唯一の実際の問題は、Unicodeへの変換です。 DelphiでのUnicodeサポートの実装方法を学ぶ必要があります-Marco Cantuから始めてください ホワイトペーパー:DelphiおよびUnicode

実際のコードを知らずに、古いアプリケーションをUnicodeにアップグレードするために必要な作業量を見積もることは不可能です。文字列型を標準的な方法で使用している場合、変換は簡単です。文字列型を使用した低レベルのトリック(バイナリデータを文字列に格納するなど)は非推奨になり、対応するコードを書き直す必要があります。

29
kludg

一部の小さなツールは、変更を加えることなく移行したり、実行するためにいくつかのUnicode修正を行ったりします。

ただし、コードベースがあなたが説明しているように巨大である場合、ここで誰かがあなたに言うつもりに完全に依存するべきではありません。 XEのコピーを取得してコードをロードするだけです。どのような問題が発生しているのかを確認して、それが必要とする努力の量を感じ取ってください。

この時点で、すべてのコードをXE(古いプロジェクトも含む)に移植しました。私はできる限り同じライブラリを再利用するので、それらのほとんどを変換したら、アプリケーションをDelphi 7からUnicodeに「移植」することは、通常、ライブラリの更新されたインターフェイスを処理するか、またはコンパイラのエラーと警告を修正します。

私が遭遇した最も一般的なエラー:

  • Unicodeのもの。これには90%の時間がかかります。コードが多くの低レベルの文字列処理を行うのは面倒ですが、問題のほとんどは、いくつかの型キャストを追加することで簡単に修正できます。

  • _c in ['a'..'z']_を使用すると、コンパイラは愚痴を言います。ユニコード文字列にはCharInSet()を使用することになっています。

  • ShortDateFormatを設定すると、代わりにFormatSettings.ShortDateFormatを使用する必要があるというコンパイラ警告が表示されます。新しいコードではそれは良い考えです。移植する場合は、最初から無視したいだけです。

さらに、おそらくサードパーティのライブラリを新しいバージョンにアップグレードするので、それらを自分で移植する必要はありません。それらがインターフェースや動作を変更したことは珍しいことではないので、それらの試用版をダウンロードして何が変更されたかを確認します。

15

私はそれらの変換のかなりの数を行ってきました。

現在のコードベースをテスト可能にして準備する必要があります。自動化された単体テストを使用することをお勧めしますが、少なくとも適切なエンドユーザーテスト計画を立ててください。

次に、最も大きな部分、つまりアプリとデータベースの両方のUnicode変換を計画する必要があります。

最後に、メジャーではありませんが、潜在的に非常に時間がかかる側面があります。

  • bDEを使用している場合、これはそれを取り除くときです
  • delphi XEはDelphi 7よりも厳密です
  • サードパーティライブラリのバージョンはかなりの数のバージョンに分類され、通常はVCLよりも後方互換性がはるかに劣ります。

移植したら、今こそ物事を変更するときです。コードベース全体を見てきたので、弱点がどこにあるかがわかったので、それらをリファクタリングし始めて、以前よりも優れたアプリを入手できます。

応答コメントの1つでSQLについて言及しました...データベースはUnicodeをサポートしていますか?そうでなければ、あなたは多くの仕事に参加することができます。データベースをオンザフライで変換するか、ユーザー向けの変換ツールを作成する必要がある場合があります。データベースをアップグレードするか、別のものに切り替える必要がある場合もあります。たとえば、DBISAMはUnicodeに対応していませんが、ベンダーはElevateDBを作成しています。移行は簡単ではありません。そして、大部分がアセンブラーで書かれたHyperstringのような他のいくつかのライブラリーは、別の痛手スポットです。

6
Chris Thornton

私のプロジェクトは約100万行のコードで、最近CB9からXEに移植しました。作業量を削減するために、最初に多くの部分を書き直したので、サードパーティのコンポーネントパックに依存しなくなりました。次に、関連するすべての文字列(Unicode)を注意深く調べ、それからXEに移動しました。準備は大変な作業でしたが、実際の移植は比較的簡単でした。

5
Mike Versteeg

この移行を実行することは間違いなく挑戦です。しかし、良い計画が必要です!

最初に、コードとともに移行する必要があるすべての可能なコンポーネントを見つける必要があります。 Delphi7プロジェクトで使用されていないサードパーティのコンポーネントが利用できない場合、さらに進めるのは非常に複雑です。次に、Unicodeに関連する他の型変換は非常に簡単です。そしてもちろん、他のサポートライブラリ、BDE、およびデータベースアダプターを導入する必要があります。

リッチユーザーインターフェイスの場合、Delphi FireMonkey を使用できます。

Delphi は、デスクトップからWebからモバイルへのアプリケーション開発をサポートするようになり、どんどん良くなっています。

0