AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Compiler Directive zur Laufzeit abfragen?
Thema durchsuchen
Ansicht
Themen-Optionen

Compiler Directive zur Laufzeit abfragen?

Ein Thema von moelski · begonnen am 14. Sep 2010 · letzter Beitrag vom 15. Sep 2010
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 18:52
Moin !

Wenn ich eine Directive festlege ala
{$Define TESTMODE} Kann ich das dann zur Laufzeit auch abfragen?

Oder bestehen die Infos nur bis zum Compilieren?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 18:53
Die bestehen erstmal nur bis zum Kompilieren, du könntest aber eine Konstante deklarieren ...
Delphi-Quellcode:
const
  TESTMODE = {$ifdef TESTMODE}true{$else}false{$endif};
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 18:57
Moin !

Danke für den Tip. Das täte mir vermutlich schon reichen.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 20:49
Nur nochmal zum Verständnis ... die heißen nicht umsonst Compiler-Direktiven, da sie sich direkt an den Compiler wenden, diesen "steuern" und nicht persönlich in die EXE einkompiliert werden.

Also du kannst, wie schon genannt, den Compiler anweisen, daß er etwas machen soll, welches dein "Programm" verändert.


Man kann das ganze aber auch andersrum lösen.
Delphi-Quellcode:
const TESTMODE = true;

{$if TESTMODE} .. {$ifend};
Halt jenachdem, was man genau vor hat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Sep 2010 um 20:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 23:48
Die bestehen erstmal nur bis zum Kompilieren, du könntest aber eine Konstante deklarieren ...
Delphi-Quellcode:
const
  TESTMODE = {$ifdef TESTMODE}true{$else}false{$endif};
Wobei ich den Sinn dahinter nicht ganz so verstehe...

Weil, wenn Du nun im Code auf

if Testmode then abfragst, dann kannst Du auch gleich wieder

{$ifdef TESTMODE} machen.

Außerdem ist dann, wenn Du die Compiler-Direktive nutzt, ausgeschlossen, dass im Release-Build Testcode vorhanden ist. Wenn Du es mit dem normalen If einkompilierst, kann man den Testcode auch im Release wiederfinden.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 14. Sep 2010, 23:52
Um mal ein Beispiel zu konstruieren:
Eine DLL soll zur Laufzeit herausgeben, ob sie nun im TESTMODE läuft oder nicht.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 05:49
Moin !

Um mal kurz zu erklären warum ich das brauche ...
Unsere Software kommt aus dem Hobbybereich (Modellbau). Nun wollen wir aber bald die Soft auch kostenpflichtig anbieten da es doch einige Nachfragen von Firmen gab.
Diese haben aber im Normalfall kein Interesse an den "Hobbyfunktionen".

Somit brauche ich eine Möglichkeit entweder die Funktionen in DLLs auszulagern - was ich so langsam verworfen habe - oder eben eine EXE zu erzeugen die den Ballast erst gar nicht beinhaltet.

Soweit dazu. Ich habe das jetzt mal mit den Directiven getestet. In einer Unit klappt es super. Oben habe ich {$Define HOBBY} und weiter beim Use wird die Unit je nach Switch erst gar nicht eingebunden:
{$ifdef HOBBY},Project_Item_XYZ{$endif}.
Dann noch die eigentliche Erstellung der Project Item Instanz umklammern mit {$ifdef HOBBY} CODE {$endif} und ich kann 2 EXEn erzeugen.

Was mir aber nicht gelingt ist ein "globaler" Switch. Ich würde gerne in meinem Projekt Source einen Schalter setzen können. Das mag er aber nun gar nicht.
Sind die Directiven immer Unitbezogen?
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010

Geändert von moelski (15. Sep 2010 um 05:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 06:02
Diese Compiler-Direktiven gelten nur innerhalb einer Unit.
Global geht von innerhalb nicht, außer man gibt die über den Compiler rein (z.B. über die Projektoptionen des Inlinecompilers oder über einen entsprechenden Parameter des Komandozeilencompilers).

Eine alternative wäre noch eine Include-Datei, welche man überall einbindet.

PS: Bei der Variante mit dem Kompilerschalter über die Projektoptionen und den Parameter, muß man alles manuell komplett neu kompilieren, da der Compiler dieses nur in neu kompilierten Dateien aktualisiert.
Wurde eine Datei nicht verändert, dann "optimiert" Delphi dieses weg, da dann die Datei nicht automatisch neu kompiliert wird, da Delphi nicht automatisch auf "extern" geänderte Kompilerschalter reagiert.

PS: Über die Variante mit der Konstante und dem {$IF kann man auch über Uses-Grenzen gehen. (das nutze ich in meinem himXML, um zu prüfen ob die Units im selben Modus kompiliert wurden, wenn man die Comilerschalter umgestellt hat)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (15. Sep 2010 um 07:26 Uhr)
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 06:34
@himitsu :

Im Project Source klappt es nicht mit der Konstanten. Aber wenn ich das in eine Unit packe die ich eh überall eingebungen habe, dann klappts.

Die Exe wird ja nach Schalter 2Kb größer oder eben nicht Man muss natürlich komplett neu compilieren, aber das ist ja kein wirkliches Problem.

Vielen Dank für den Tip !!!
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Compiler Directive zur Laufzeit abfragen?

  Alt 15. Sep 2010, 07:25
Hi,

du hast doch D2010. Da kann man doch wunderschön in der Projektverwaltung eine neue Build-Konfiguration anlegen.
Dort kannst du unter Bedingungen dein DEF eintragen.
Und wenn du noch ein anderes Ausgabe - Verzeichnis dafür definierst, liegen die EXE'n auch noch in einem betreffenden Verzeichnis.

Das finde ich IMHO viel einfacher und übersichtlicher.

Frank
Frank Reim
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:18 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