9

次のような多くの条件付きディレクティブ ブロックを含む多くのユニットがあります。

{$IFDEF DELPHI6ANDLOWER}
  *Do something 1*
{$ELSE}
  *Do something 2*
{$ENDIF}

ここで、Delphi 6 (VER140) およびそれ以前のバージョンのサポートを終了することにしました。

魔法をかけることができるツールはありますか?うまくいけば、上記のコードは次のようになります。

  *Do something 2*

ModelMaker、CnPack、GExperts をテストしましたが、どれも魔法のようにはできませんでした。

4

2 に答える 2

16

Delphi Inspiration のフリーウェア プログラム DIPP は、条件を削除できます。

http://www.yunqa.de/delphi/doku.php/products/dipp/index

于 2012-10-16T18:48:25.890 に答える
4

まず、@ctomitaが言及したDIPPツールが私の場合に完全に機能することを確認します。

2 つ目は、このツールを使用して事例を解決する方法を人々と共有することは有益だと思います。

Test1.pas

//--------------------------------------
{$IFDEF ONE}
  ShowMessage('If ONE was defined');
  WriteLn('If ONE was defined');
  {$IFDEF ONE_ONE}
    ShowMessage('If ONE_ONE was defined');
    WriteLn('If ONE_ONE was defined');
  {$ENDIF}
{$ELSE}
  ShowMessage('If ONE was not defined');
  WriteLn('If ONE was not defined');
{$ENDIF}
//--------------------------------------
{$IFNDEF ONE}
  ShowMessage('If ONE was not defined');
  WriteLn('If ONE was not defined');
{$ELSE}
  ShowMessage('If ONE was defined');
  WriteLn('If ONE was defined');
{$ENDIF}
//--------------------------------------

ONETest1.pas からすべての条件付きブロックを削除するには、現在定義されている条件付きシンボルがあるかのように仮定して、コマンド プロンプトから次のコマンドを使用します。ZERO

dipp -o -c -dZERO -h-ONE "Test1.pas" "Test1_output.pas"

Test1_output.pas

//--------------------------------------

  ShowMessage('If ONE was not defined');
  WriteLn('If ONE was not defined');

//--------------------------------------

  ShowMessage('If ONE was not defined');
  WriteLn('If ONE was not defined');

//--------------------------------------

-cオプションが指定されている場合、DIPP は未定義の条件で囲まれたコードをスキップし、定義された条件に応じてインクルード ファイルを挿入することに注意してください。つまり、DIPP はソース コードをコンパイラと同じように扱います。

于 2012-10-17T18:36:47.930 に答える