さて、私はゲームのために2つのプロジェクトを持っています。1つはサーバーで、もう1つはクライアントです。クライアント/サーバープロジェクトに含めるために使用する共有フォルダーに共有ユニットを保持します。ただし、問題があります。クライアント/サーバー用に別のファイルを必要とする共有ファイルがあります。例:mySharedLibはコンソールに出力する必要がありますが、クライアント/サーバーコンソールは異なります。私のオプションは何ですか?ありがとう
2 に答える
共有ファイルでは、definecompilerディレクティブを使用できます
例えば
{$IFDEF MYSERVER}
Writeln('Server'); // this code executes
{$ELSE}
Writeln('Client'); // this code does not execute
{$ENDIF}
次に、サーバープロジェクトでMYSERVER定義を定義し、クライアントでMYCLIENT定義を定義します。次に、共有コードが分離する場合は、{$ IFDEF)ステートメントを使用します。
条件付きディレクティブ$IFDEF、$ IFNDEF、$ IF、$ ELSEIF、$ ELSE、$ ENDIF、および$ IFENDを使用すると、条件付きシンボルのステータスに基づいてコードをコンパイルまたは抑制できます。$IFおよび$ELSEIFを使用すると、宣言されたDelphi識別子に基づいて条件付きコンパイルを行うことができます。$ IFOPTは、指定されたコンパイラスイッチが有効になっているかどうかに応じて、コードをコンパイルまたは抑制します。
ただし、共有コードがDLLまたはパッケージなどの他の種類のコンパイル済み共有リソースにある場合、これは機能しません。
条件付き定義は、ソースコードが再コンパイルされたときにのみ評価されます。条件付きシンボルのステータスを変更してからプロジェクトを再構築すると、変更されていない単位のソースコードが再コンパイルされない場合があります。Project | Build All Projectsを使用して、プロジェクト内のすべてが条件付きシンボルの現在のステータスを反映していることを確認します。
それらが異なる場合、それらは実際にはもはや共有ファイルではありません。