6

これはこのように機能する必要がありますか、それとも何か間違っていますか?

プロジェクト ソースに次のコードがあります。

  {$IFDEF DEBUG}
  ADebugUnit,
  {$ELSE}
  ARelaseUnit,
  {$ENDIF}

デバッグ モードでは ADebugUnit を使用し、リリース モードではコンパイル時に AReleaseUnit を使用したいと考えています。プロジェクトに新しいユニットを追加することを選択した場合を除いて、これはうまく機能します。これを行うと、基本的にコードが処理され、プロジェクトが現在設定されている構成に関連するユニットのみが保持されます。

たとえば、構成がデバッグに設定されている場合、プロジェクトに新しいユニットを追加した後、上記のコードは次のように変更されます。

ADebugUnit,

または、構成がリリースに設定されている場合、新しいユニットを追加すると、次のように変更されます。

ARelaseUnit,

新しいユニットを追加した後は、常に条件ステートメントに戻す必要があります。新しいユニットの追加に干渉させずにこれを達成する方法はありますか?

4

3 に答える 3

0

ロブの答えに基づいて構築するために、このようなことをする必要がある状況があるときはいつでも、すべての DPR コードを別のユニットに移行しますAppInit.pas

unit AppInit;

interface

uses
  Vcl.Forms,
  Unit1,
{$IFDEF DEBUG}
  ADebugUnit
{$ELSE}
  AReleaseUnit
{$ENDIF}
  ;

procedure RunApp;

implementation

procedure RunApp;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.Title := 'Sample Application';
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end;

end.

次に、プロジェクトユニットは

program SampleApp;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  AppInit in 'AppInit.pas';

{$R *.res}

begin
  RunApp;
end.

これの欠点は、IDE がどのタイプのアプリケーションであるかについて混乱し、 に移動するとProject > Options、VCL スタイルなどの一部の機能が無効になることです。ただし、適切なコーディングがあれば、そのようなことはまだ実装できます。

PS - 私がこの 100% を直接 StackOverflow に書き込んだという事実をご容赦ください。

于 2013-10-17T00:03:51.117 に答える