12

しばらく前にDelphi7で書いたユニットがあり、Delphi XE(Unicode)に変換するのが楽しく(苦痛)なりました。

ユニットは問題が発生した後も正常に動作します。他のコードを更新しているときにIDEをDelphi7に戻す必要が生じた場合に備えて、このユニットをさまざまなDelphiバージョンと互換性を持たせようとしています。

私はDelphi7とDelphiXEしか持っていませんが、Delphi1で記述されたコードを収集したものからDelphi2007まではコンパイルされますが、Delphi2009以降のコードはUnicodeになります。

...とにかく、ユニットでは、非ユニコードとユニコードを次のように分離しています:

{$IFDEF VER150} //Delphi 7
// code
{$ELSE IFDEF VER220} //Delphi XE
// code
{$ENDIF}

ルールがマルチバージョンに適用されるようにコンパイラ指令を変更するにはどうすればよいですか?たとえば、次のようなものです。

{$IFDEF VER80,  //D1
        VER90,  //D2
        VER100, //D3
        VER120, //D4
        VER130, //D5
        VER140, //D6
        VER150, //D7}

ソースまたは.dcuユニットを配布する場合、これはすべてのDelphiバージョンをカバーします。

ありがとう。

4

2 に答える 2

18

この場合の最も簡単なアプローチは、UNICODE条件付きで動作を切り替えることなのだろうか。この条件は、Delphi の Unicode バージョン、つまり Delphi 2009 以降を使用している場合にのみ定義されます。これの大きな利点は、将来性があることです。新しい Delphi がリリースされるたびにコードを更新する必要はありません。さらに、条件付きスイッチは意図を明確に表現するため、はるかに読みやすくなります。

Delphi のドキュメントには、事前定義されたすべての条件をリストした優れたトピックがあります。バージョン条件の完全なリストもそこからリンクされています。

于 2011-11-25T14:20:45.567 に答える
6

あなたの最善の策は、多くの JEDI プロジェクトの 1 つ、たとえばhttp://sourceforge.net/projects/jedi-apilib/を実際に見て、彼らがどのようにそれを行っているかを見ることです。それらには、関心のある詳細を正確に含む共通のインクルード ファイルがあります。JVCL は別の良い選択です ...

于 2011-11-25T14:11:10.927 に答える