![]() |
Delphi-Version: XE
define in anderer Unit wird nicht 'erkannt'
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:
Ich möchte mit einem define in einer Unit bedingtes Kompilieren in verschiedenen Units erreichen... Wie kann ich das hinbekommen?
unit Unit2;
interface {$define MyDef} implementation end. |
AW: define in anderer Unit wird nicht 'erkannt'
Das define gilt nur innerhalb der Unit.
siehe auch http://www.delphipraxis.net/18752-globale-compiler-directive-wie-%7B$define-test%7D.html |
AW: define in anderer Unit wird nicht 'erkannt'
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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) |
AW: define in anderer Unit wird nicht 'erkannt'
Zitat:
|
AW: define in anderer Unit wird nicht 'erkannt'
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke schon, mit Shift+F9
Scheint aber nicht zu gehen (siehe erneut Anhang) |
AW: define in anderer Unit wird nicht 'erkannt'
Zitat:
|
AW: define in anderer Unit wird nicht 'erkannt'
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} |
AW: define in anderer Unit wird nicht 'erkannt'
Zitat:
Habe mittlerweile die richtige Stelle gefunden: Delphi-Compiler->Bedingungen. Vielen Dank an alle. |
AW: define in anderer Unit wird nicht 'erkannt'
Zitat:
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. :oops: (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} |
AW: define in anderer Unit wird nicht 'erkannt'
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
Delphi-Quellcode:
ein.
{$I include.inc}
In dieser Datei steht
Delphi-Quellcode:
.
{$DEFINE PROJEKT}
Und in dieser Unit, die beide Projekte nutzen, steht dann:
Delphi-Quellcode:
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.
uses
{$IFDEF PROJEKT} Forms, {$ENDIF} ... // viel code // und am ende eine Methode, welche enthält: {$IFDEF PROJEKT} Application.ProcessMessages; showmessage('X'); {$ENDIF} Aber es funktioniert nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz