5

1998/99年にDelphi3で作成した、それ以来安定して実行されているプロジェクトを再開するように依頼されました。私は、このプロジェクトを存続させるためだけに存在する古いWindows98マシン上にDelphi3コードベースを持っています。もちろん、大幅な改訂を行う前に、ソースコードベースを21世紀に持ち込みたいと思います。

Delphi 2010(私は現在2007年にいます)がDelphi2以降からプロジェクトをインポートできると主張していることを嬉しく思います。Delphi 3から大規模なプロジェクトをインポートした経験のある人はいますか?これは簡単な移行であると期待できますか、それとも難しい移行であると期待できますか?

さらに、元のプロジェクトでは、DBISAM、WPTools、TMSPlannerなどのサードパーティコンポーネントを使用しています。これらはすべて、Delphiの最新リリースでも引き続き利用できることに注意してください。新しいバージョンをDelphi2010に最初にインストールしたとすると、これらのコンポーネントを使用するアプリケーションの部分も変換されると期待できますか?元のアプリケーションで使用されていたバージョン以降、少なくともWPToolsのコンポーネント構造とインターフェイスの一部が変更されていることはわかっています。もちろん、そこで再コーディングを行う必要がありますが、プログラムのこれらの部分で障害が発生すると、コードベースがアップグレードされていますか?

4

7 に答える 7

6

この移行を行うことは非常に可能であるはずであり、コードの記述方法に応じて、痛みを伴う場合と痛みを伴わない場合があります。残念ながら、移行プロセスを開始するまで、どちらかを言うのは簡単ではありません。

私が最初にすることは、すべてのDFMファイルがテキスト表現に変換されていることを確認することです。これは、Delphiの新しいバージョンではデフォルトに設定されていると思いますが、覚えているように、Delphi3はバイナリ形式を使用していました。DFMをテキストに変換できるDFMConvertまたは何かという名前のユーティリティファイルがdelphi3binディレクトリにあるはずです。これを実行する理由は、コンポーネントがロードされていないためにDFMの手動編集を実行する必要がある場合に、ソースを確実に読み取れるようにするためです。Delphiのバージョンをジャンプしているだけでなく、使用するすべてのコンポーネントのバージョンもジャンプしているため、コンポーネントのロードに失敗する可能性のあるいくつかの非互換性が存在する可能性があります。これが事実であり、あなたが「新しい」バージョンを持っているかどうかを私は見つけました、次に、DFMソースを直接編集して、テストフォームとそのコンポーネントを古いバージョンに含まれているものと比較します。場違いなものをすべて削除(または名前変更)してから、フォームの読み込みを再試行してください。

Frabricioが述べたように、バリアントを使用する場合は、uses句を微調整する必要があります。

幸いなことに、components / uses句を修正すると、コード自体は正常に機能するはずです。Delphi 2010に直接アクセスする場合、他の唯一の問題はUnicodeであり、コンパイラはエラーと警告を介してそれらすべてを指摘するという素晴らしい仕事をします。

于 2009-10-02T16:20:39.957 に答える
5

D2007があり、これらすべてのコンポーネントセットにD2007 dcusが付属していると仮定すると、最初にD2007でコードベースを再度開くことをお勧めします。その後、実際のVCLのUnicode機能のためにD2010に移動します。これにより、移行の問題が発生する可能性があります(これについては、WebおよびSOで詳しく説明されているため、ここでは説明しません)。

D5とD7の間のどこか(正確に記録しない)でrtlのユニットの再編成が行われたため(Variants.pasユニットの作成や多くのOTAPIユニットの名前の変更など)だと思います。だから、それはあなたの最初の問題が発生する場所になります。編集:バリアントが再配置されただけでなく、多くのIDE統合も-ライセンスされていないコードがデプロイされるのを避けるために。OTAPIコード(たとえば、継承されたフォームで公開されたプロパティを許可するコード)がある場合は、パッケージプロジェクトに再配置する必要があります。

skramradtが言ったように、バイナリDFMのことを処理する必要があるかもしれません。

その後、すべてが機能する場合は、Unicodeに進みます。アプリによっては、簡単な場合とそうでない場合があります。私のものにとっては、大きな迷惑ではありません。しかし、私よりも大きな問題に直面している人がいることを私は知っています。

于 2009-10-02T15:35:21.740 に答える
4

Delphi2010へのアップグレードに関して作成したいくつかのメモを次に示します。

  1. Delphi2010でコンパイルされた実行可能ファイルは、Delphi3でコンパイルされた実行可能ファイルの約3倍のバイト数です。
  2. コンパイルすると、Delphi3よりもヒープ全体に多くの警告とヒントが表示されます。すべてのヒントと警告を削除することをお勧めします。
  3. Delphi3では正常にコンパイルされるがDelphi2010ではコンパイルされない破損したPascalファイルをいくつか見つけました。視覚的には問題や違いは見られません。ただし、コンパイルエラーは、間違った行番号のエラーを明確に示しています。私の例では、問題はCR / LFに関連していましたが、私のDelphiではCRしかありませんでした。解決するのが難しい問題とリアルタイムの浪費。ただし、テキストはメモ帳またはWinHex.exeを使用して表示できます。これらの制御文字を識別できるPARSER.EXEというプログラムを作成しました。これは、制御文字がどこにあるかがわかったら、メモ帳でこれらのファイルを編集するための最良の方法です。
  4. AnsiString。Delphi 2010は、AnsiStrings、MBCS、およびWideStrings(UniCode)を使用するようになりました。ASCII文字列を使用したDelphi3とは対照的です。標準のDelphi2010実装では、文字列をUnicodeとして使用し、文字を16ビット文字として使用します。ここで、多くの8ビットASCII文字列がAnsiStringsとして定義されていることを確認する必要があります。明らかに、PCharでインターフェイスが定義されていた古いdllには、PAnsiCharが必要です。
  5. 次の理由により、コードはDelphiプラットフォーム間で互換性がありません。
  6. Delphi 2010には、AnsiChar、AnsiStringsなどの追加の関数と変数タイプがあります。
  7. 後者のDelphiバージョンには追加のプロパティがあるため、フォームはバージョン間で互換性がありません。
  8. dcusはバージョン間で互換性がありません。
  9. パッケージはバージョン間で互換性がありません。Delphi2010にはCrystalReportsがないため、これを別途購入する必要がある場合があります。使用された他のパッケージも、コストをかけてアップグレードが必要になる場合があります。
  10. Readfile、Writefile、GettickCountなどの多くの関数は、DWORDとしてパラメーターを要求するようになりましたが、Delphi3はより寛容でした。これらの機能の一部は、より高いディスク容量に関連付けられています。
  11. ポップアップメニュー。これらには、AUTOHOTKEYと呼ばれる新しいプロパティがあります。これは手動に設定する必要があります。これがデフォルトとして設定されている場合、キャプションには「&」が含まれます ホットキー機能を提供するために挿入されます。
  12. カーソル。カーソルの使用方法が変更されました。
  13. Delphi2010には、使いやすさを犠牲にして追加された機能が山ほどあるようです。おそらくDelphi3は、より優れた、より使いやすいインターフェイスを備えていました。
  14. ヘルプ。Delphi 3よりも優れているかもしれませんが、ヘルプ情報を見つけようとすると数分間消えてしまうようです。インタラクティブヘルプは厄介です。
  15. BorlandMM.dllは、Delphi2010アプリケーションを搭載したWindows2000では機能しません。したがって、このdllを使用する場合は、PCの負荷をアップグレードする必要があります。

アップグレードするアプリケーションdllとCOMサーバーが約100あります。おそらく約12週間は試運転で動作します。お役に立てれば。

于 2010-10-20T06:25:11.260 に答える
3

念のために言っておきますが、最近、開発中のソフトウェアをDelphi4からDelphi2009に変換して、Unicode機能を取得しました。多くの問題がありましたが、数週間以内にすべて解決できました。

注意点:サードパーティのパッケージを使用する場合は、変換する前にアップグレードできるDelphi2010バージョンが利用可能であることを確認してください。Delphi 2009は問題ありませんが、D2010では古いパッケージを使用しようとはしません。

于 2009-10-02T18:50:27.970 に答える
1

D3からD2010への移行についてはあまり言えませんが、最近D6からD2010への移行に成功しました。まず、私が行ったことは、D3で使用したすべてのサードパーティコンポーネントがD2010でも使用できるようにすることでした。カスタムビルドされたコンポーネントをD6からD2010に再コンパイルします。D6ソースコードをロードしてコンパイルします。すべてのUnicodeの問題を処理します。すべてのコンパイラエラーを1つずつ処理します...すべて約3日で完了します(約30000行のコード)

于 2010-06-15T03:32:40.973 に答える
0

私は他の人が言っていることを確認します:あなた自身のコードに関する限り、D3アプリケーションをD2010に変換することは通常簡単です。

2つの問題があります。

  1. 文字列を一般的なバッファとして使用し、文字以外のものを格納しました。
  2. コードでは、sizeof(char)が1であると想定しています。つまり、SizeOf()を使用する必要がある場合はLength()を使用するか、その逆を使用します。

最も難しい部分は、サードパーティのコンポーネントです。

使用しているすべてのコンポーネントがD2010にまだ存在しているように見えますが、これは良い点です。ただし、インターフェイスが変更されている可能性があり、もちろんコードを変更する必要があります。

于 2009-10-13T13:29:03.073 に答える
0

Delphi2010がすぐにアップグレードできるDelphi7プロジェクトグループがあります。残念ながら、新しく作成されたDelphi 2010プロジェクトグループファイルを使用した次の起動時に、プロジェクトのロード後にIDEがクラッシュして消えてしまいます。例外は表示されず、エラーメッセージも表示されません。私の回避策は、Delphi 7ファイルを常に使用し、新しく作成されたプロジェクトファイルを使用せずにDelphi2010に好きなようにアップグレードさせることです。

于 2010-04-06T15:46:23.463 に答える