AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bedingte Kompilierung, wenn IDE gestartet ist

Ein Thema von TObject · begonnen am 22. Sep 2010 · letzter Beitrag vom 6. Mai 2016
Antwort Antwort
TObject

Registriert seit: 4. Apr 2008
11 Beiträge
 
#1

Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 22. Sep 2010, 11:55
Delphi-Version: 5
Hallo zusammen,

ich möchte über Compilerschalter bzw. -direktiven erkennen, ob die IDE gerade gestartet ist, d.h. ob ich im Debugmodus bin.

Ich stelle mir das in etwa so vor:
Code:
const
{$IF DEBUG}
   MY_VALUE = 50;
   YET_ANOTHER_VALUE = 10;
{$ELSE}
   MY_VALUE = 25;
   YET_ANOTHER_VALUE = 5;
{$END}
Eine selbstgeschriebene Funktion "IsIDEStarted: boolean" (diese fragt auf DebugHook <> 0 ab) habe ich schon. Sie nützt mir aber nichts, da ich mit Konstanten arbeiten will und ich diese natürlich nicht dynamisch verändern kann.

Gibt es dafür eine Lösung?

MfG
Dietmar
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 22. Sep 2010, 11:59
Erklär doch mal, warum das eine Konstante sein soll/muss.

Imho gibt es für die Abrage da keinen Unterschied.

Man fragt ab if IsIDEStarted then und es ist egal, ob Konstante oder Funktion
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 22. Sep 2010, 12:03
Ein Kompilerschalter bestimmt zur compiletime was kompiliert wird. Das Problem ist dabei, dass du das Programm ja zuerst debuggen kannst und dann diese Exe nutzen kannst.

Das heißt mit einem Kompilerschalter wird es nicht funktionieren, da er zur compiletime nicht weiß ob er debuggen wird.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 22. Sep 2010, 12:12
MSDN-Library durchsuchenIsDebuggerPresent
MSDN-Library durchsuchenCheckRemoteDebuggerPresent
MSDN-Library durchsuchenDebugActiveProcess

zu Hier im Forum suchenIsDebuggerPresent findet man in der DP viele Beiträge
und auch auf Luckies Webseite gibt es ein Beispiel und ich glaub auch noch einen Artikel.

Zitat:
Das heißt mit einem Kompilerschalter wird es nicht funktionieren, da er zur compiletime nicht weiß ob er debuggen wird.
Außerdem ist es uninteressant, ob beim Kompilieren ein Debugger vorhanden war ... ob der das Zurlaufzeit noch ist, ist damit ja nicht gesagt.
(abgesehn, daß eigentlich fast immer ein Debugger vorhanden ist, wärend du in der Delphi-IDE dein Programm kompilierst)



[add]
Ob ein Debugger läuft kannst du also niemals beim Kompilieren auswerten.
Aber z.B. neuere Delphis kennen mehrere Projektoptionen/Profile und beim Debug-Profil wird ein Compilerschalter "DEBUG" gesetzt, welcher über {$IFDEF DEBUG} genutzt werden kann.
Bei älteren Delphis mußt du diesen in den Projektoptionen selber setzen.

Achtung: Solche Optionen gelten nur für neukompilierte Dateien, also Strg+F9 nicht vergessen, nachdem das umgestellt wurde.


Also entweder du nutzt unterschiedliche Compilerprofile, welche aber nicht automatisch umschalten
oder du kannst erst zur Laufzeit prüfen und kannst keine Konstanten nutzen.
Miniaturansicht angehängter Grafiken
unbenannt.png  
$2B or not $2B

Geändert von himitsu (22. Sep 2010 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 4. Mai 2016, 19:52
Entschuldigt bitte, dass ich diese Thema wieder aufwärme. Ich möchte aber gern auf den exakten Titel/Betreff zurück kommen:

Ich habe ein Programm, dass de facto wie ein TSR arbeiten soll. Ich möchte hier nicht diskutieren, warum, weshalb, wieso. Dazu setze ich schon in der dpr-Datei Application.ShowMainForm:= False; , weiterhin wird bei OnFormCloseQuery CanClose auf False gesetzt und stattdessen nur ein Hide; ausgeführt. Das klappt auch perfekt.
Wenn ich das Programm aber bearbeite, ist dieses Verhalten nervig. Ich muss dann das Programm jedes Mal über den Taskmanager von Hand abwürgen bzw. dafür sorgen, dass das Hauptfenster Visible:= True; gesetzt wird.
Schöner wäre es, wenn ich - der Debugger ist mir dabei völlig schnurz - per Compilerschalter feststellen könnte, ob die IDE läuft. Damit wäre das Arbeiten am Code wesentlich einfacher.

Also gibt es einen Schalter für die IDE?
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 4. Mai 2016, 21:38
Nein, das musst du selbst prüfen.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 4. Mai 2016, 22:04
Hallo,
mach das doch von einem Parameter abhängig.
Beim Start aus der IDE (Menupunkt Start-Parameter) setzt du diesen Parameter, sonst nicht.

Und zum Schluss noch ein IFDEF kurz vorm Release,
damit nicht jemand das Programm per Parameter selber startet.


Heiko
Heiko

Geändert von hoika ( 4. Mai 2016 um 22:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

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

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 4. Mai 2016, 22:23
Die imho bessere Alternative sind unterschiedliche Defines für Debug- und Release-Build.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 5. Mai 2016, 10:36
Also gibt es einen Schalter für die IDE?
Einen Schalter gibt es nicht, aber eine function kannst du verwenden.

Delphi-Quellcode:
function IsDelphiRunning: boolean;
begin
  Result := FindWindow('TAppBuilder', Nil) > 0;
end;
So mach ich das schon sehr lange und es funzt. Ich hab mir sogar eine kleine App mit dem Fenstertitel 'TAppBuilder' erstellt und das Projekt Bds.dpr genannt. Diese kleine Exe starte ich dann bei Problemen mit der ursprünglichen Anwendung und gaukle der somit vor, dass die Delphi-IDE läuft. Damit kannst du quasi deine App dann beim Kunden "debuggen". Extrem praktisch.

[OT]So nebenbei bemerkt: Das Prinzip mit der eigenen Bds.exe funktioniert sogar mit einigen Bibliotheken zum Testen, die nur laufen, wenn die BDE gestartet ist.[/OT]
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.800 Beiträge
 
Delphi 12 Athens
 
#10

AW: Bedingte Kompilierung, wenn IDE gestartet ist

  Alt 6. Mai 2016, 08:23
Probier mal
Delphi-Quellcode:
if DebugHook > 0 then
  ShowMessage('Debugger ist da')
else
  ShowMessage('Kein Debugger');
Wobei man fairerweise wohl dazu sagen muss, daß Delphi-Referenz durchsuchenSystem.DebugHook wohl nur die IDE als Debugger sieht.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:17 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