Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi IFDEF/IFNDEF und Units (https://www.delphipraxis.net/84833-ifdef-ifndef-und-units.html)

DevilsCamp 22. Jan 2007 15:08


IFDEF/IFNDEF und Units
 
Ich habe zwei Projekte, die in einer Projektgruppe zusammengefasst werden.

Projekt 1:
Delphi-Quellcode:
program Proj1;

uses
  Forms,
  SysUtils,
  Form1 in 'Form1.pas' {Form1},
  ZusatzUnit in 'ZusatzUnit.pas',
  NochneUnit in 'NochneUnit.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Form1:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ZusatzUnit;

end.
Projekt2:
Delphi-Quellcode:
program Proj2;

{$DEFINE PROJEKTSCHALTER2}

uses
  Forms,
  SysUtils,
  Form2 in 'Form2.pas' {Form2},
  ZusatzUnit in 'ZusatzUnit.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
Form2:
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm1;

implementation

{$R *.dfm}

uses ZusatzUnit;

end.
ZusatzUnit.pas:
Delphi-Quellcode:
unit ZusatzUnit;

interface

{$IFNDEF PROJEKTSCHALTER2}
function NutzeNochneUnit: Integer;
{$ENDIF}

procedure NutzeNichtNochneUnit;

implementation

{$IFNDEF PROJEKTSCHALTER2}
uses NochneUnit;

procedure NutzeNochneUnit;
begin
  Result := FunktionAusNochneUnit * 3;
end;
{$ENDIF}

procedure NutzeNichtNochneUnit;
begin
  MacheIrgendwas;
end;

end.

NochneUnit.pas
Delphi-Quellcode:
unit NochneUnit;

interface

function FunktionAusNochneUnit: Integer;

implementation

function FunktionAusNochneUnit: Integer;
begin
  Result := 7;
end;

end.

Beide Projekte speichern ihre compilierten Units in VERSCHIEDENEN Verzeichnissen.
Nun habe ich das Problem, dass beim Compilieren von Proj2 der Fehler kommt, NochneUnit sei nicht zu finden.

Ist dies eine normale Fehlermeldung? Wenn ja, warum? Schliesslich sage ich dem Compiler doch, dass NochneUnit nur dann verwendet werden soll, wenn PROJEKTSCHALTER2 NICHT definiert ist. Und in Proj2 wird es doch gesetzt.

Der_Unwissende 22. Jan 2007 15:27

Re: IFDEF/IFNDEF und Units
 
Hi,
das Define, dass Du verwendest gilt nur für die Unit, in der Du es verwendest, nicht global.
Willst Du das ganze globler machen, musst Du diesen Schalter in den Projektoptionen unter Bedingungen angeben (oder z.B. eine inc Datei in jeder Unit mittels Include einbinden, die dann deine Schalter enthält).

Gruß Der Unwissende

DevilsCamp 22. Jan 2007 15:57

Re: IFDEF/IFNDEF und Units
 
Danke, das hat geholfen. :thumb:

uligerhardt 22. Jan 2007 16:34

Re: IFDEF/IFNDEF und Units
 
Hi!

Vielleicht kannst du auch die in ZusatzUnit und NochneUnit enthaltene Funktionalität etwas zwischen beiden Units umverteilen (u.U. auch eine dritte Unit einführen), so dass die bedingte Kompiliererei überflüssig wird.

(Sorry, wenn ich dir hier einen total banalen Vorschlag gebracht haben sollte, den du schon längst durchdacht und verworfen hast. :))

Uli.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz