AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

define in anderer Unit wird nicht 'erkannt'

Ein Thema von Viktorii · begonnen am 5. Sep 2011 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2   
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 10:47
Delphi-Version: XE
Moin.

Wieso wird das define von Unit2 in Unit1 nicht 'erkannt'?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
  private
{$ifdef MyDef}
    procedure MyProc();
{$endif}
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MyProc;
begin

end;

end.
Delphi-Quellcode:
unit Unit2;

interface

{$define MyDef}

implementation

end.
Ich möchte mit einem define in einer Unit bedingtes Kompilieren in verschiedenen Units erreichen... Wie kann ich das hinbekommen?
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 10:50
Das define gilt nur innerhalb der Unit.
siehe auch http://www.delphipraxis.net/18752-globale-compiler-directive-wie-%7B$define-test%7D.html
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#3

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 11:12
Das define gilt nur innerhalb der Unit.
siehe auch http://www.delphipraxis.net/18752-globale-compiler-directive-wie-%7B$define-test%7D.html
*gnümpf*

Okay, mit dem Include wäre ja schon mal eine Lösung, aber wo kann ich denn in den Projektoptionen unter Delphi XE sowas anlegen, wie in dem verlinkten Thread beschrieben?

Dort wo ich es versucht habe, klappt das nicht (siehe Anhang)
Miniaturansicht angehängter Grafiken
def.png  
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.735 Beiträge
 
Delphi 2007 Professional
 
#4

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 11:16
Dort wo ich es versucht habe, klappt das nicht (siehe Anhang)
Sollte schon so klappen. Hast du nach der Änderung der Optionen das Projekt komplett neu erzeugt? Sonst wirkt das Define nicht.
Uli Gerhardt
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#5

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 11:21
Ich denke schon, mit Shift+F9

Scheint aber nicht zu gehen (siehe erneut Anhang)
Miniaturansicht angehängter Grafiken
def2.png  
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#6

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 11:50
Dort wo ich es versucht habe, klappt das nicht (siehe Anhang)
Das sind ja auch die Bedingungen für de Resourcen-Compiler!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.111 Beiträge
 
Delphi 12 Athens
 
#7

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 12:02
Glabale DEFINES kann man über die Projektoptionen angeben.


Wenn "Conditional Expessions" im Compiler vorhanden sind, dann kann man statt auf Defines auch auf Typen/Constanten und Co. prüfen.

Delphi-Quellcode:
// Unit 1
{$IFDEF IRGENDWAS}
  const MyIRGENDWAS = True;
{$ENDIF}

// Unit 2
uses Unit1;
{$IF Declared(MyIRGENDWAS)}  // kann eine Konstante, Klasse oder Variable sein
  ...
{$IFEND}
Delphi-Quellcode:
// Unit 1
const MyIRGENDWAS = {$IFDEF IRGENDWAS}True{$ELSE}False{$ENDIF};


// Unit 2
uses Unit1;
{$IF MyIRGENDWAS}
  ...
{$IFEND}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#8

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 12:32
Dort wo ich es versucht habe, klappt das nicht (siehe Anhang)
Das sind ja auch die Bedingungen für de Resourcen-Compiler!
Jo, da hast Du recht. Habe nur nach 'Verzeichnisse und Bedingungen' geschaut und übersehen, dass das für den Ressourcen-Compiler ist.

Habe mittlerweile die richtige Stelle gefunden: Delphi-Compiler->Bedingungen.

Vielen Dank an alle.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.111 Beiträge
 
Delphi 12 Athens
 
#9

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 5. Sep 2011, 12:59
Habe mittlerweile die richtige Stelle gefunden: Delphi-Compiler->Bedingungen.
Wenn sich diese Definition "öfters" mal ändern könnte, dann nimm Abstand davon.

Der Compiler bekommt diese Änderungen nicht mit und wenn sich sonst nichts in einer Unit geändert hat, dann wird sie nicht neu kompiliert.
Da hilft dann nur neu "erzeugen", was man gerne mal vergißt.
(macht voll Spaß, wenn man diese Condition in mehreren Units verwendet und diese am Ende unterschiedlich kompiliert wurden)

Ein Include-Datei wird dagegen immer beachtet.




Mit sowas hatte ich mir mal beholfen, als ich das DEFINE in eine andere Unit weiterreichen wollte.
Delphi-Quellcode:
// ########## Unit 1 ##############################

{$DEFINE IRGENDWAS}  // oder in den Projektoptionen

...

{$IFDEF IRGENDWAS}
  const IRGENDWAS_MARKER = True;
  {$MESSAGE Hint 'Define "IRGENDWAS" wurde gesetzt.'}  // nur sichtbar, wenn die Unit gerade kompiliert wurde
{$ENDIF}

...

{$IFDEF IRGENDWAS}...{$ENDIF}

// ########## Unit 2 ##############################

uses Unit1;

{$UNDEF IRGENDWAS}
{$IF Declared(IRGENDWAS_MARKER)}
  {$DEFINE IRGENDWAS}
{$IFEND}

...

{$IFDEF IRGENDWAS}...{$ENDIF}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Sep 2011 um 13:01 Uhr)
  Mit Zitat antworten Zitat
CocoPops
(Gast)

n/a Beiträge
 
#10

AW: define in anderer Unit wird nicht 'erkannt'

  Alt 3. Apr 2014, 17:28
Hallöchen allle DPler.

Dasselbe Problem habe ich momentan auch.
Ich habe zwei Projekte und beide Projekte nutzen dieselbe Unit (kein Form, nur Methoden und ein paar Konstanten sind vorhanden).

In Projekt A binde ich {$I include.inc} ein.
In dieser Datei steht {$DEFINE PROJEKT} .

Und in dieser Unit, die beide Projekte nutzen, steht dann:
Delphi-Quellcode:
uses
 {$IFDEF PROJEKT} Forms, {$ENDIF} ...

 // viel code
 // und am ende eine Methode, welche enthält:

{$IFDEF PROJEKT}
 Application.ProcessMessages;
 showmessage('X');
{$ENDIF}
Application.ProcessMessages; wird nie aufgerufen und showmessage('X'); ebenfalls nicht. Zudem ist die Unit Dialogs nicht einmal in der Uses-Liste. Kompiliert wird es dennoch.
Aber es funktioniert nicht.

Geändert von CocoPops ( 3. Apr 2014 um 17:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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