Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Bedingte Kompilierung, wenn IDE gestartet ist (https://www.delphipraxis.net/154714-bedingte-kompilierung-wenn-ide-gestartet-ist.html)

TObject 22. Sep 2010 10:55

Delphi-Version: 5

Bedingte Kompilierung, wenn IDE gestartet ist
 
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

Sir Rufo 22. Sep 2010 10:59

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
Erklär doch mal, warum das eine Konstante sein soll/muss.

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

Man fragt ab
Delphi-Quellcode:
if IsIDEStarted then
und es ist egal, ob Konstante oder Funktion

xZise 22. Sep 2010 11:03

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
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

himitsu 22. Sep 2010 11:12

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

Schwedenbitter 4. Mai 2016 18:52

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
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
Delphi-Quellcode:
Application.ShowMainForm:= False;
, weiterhin wird bei
Delphi-Quellcode:
OnFormCloseQuery
CanClose auf False gesetzt und stattdessen nur ein
Delphi-Quellcode:
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
Delphi-Quellcode:
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?

jaenicke 4. Mai 2016 20:38

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
Nein, das musst du selbst prüfen.

hoika 4. Mai 2016 21:04

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
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

BUG 4. Mai 2016 21:23

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
Die imho bessere Alternative sind unterschiedliche Defines für Debug- und Release-Build.

mm1256 5. Mai 2016 09:36

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
Zitat:

Zitat von Schwedenbitter (Beitrag 1337493)
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]

Sherlock 6. Mai 2016 07:23

AW: Bedingte Kompilierung, wenn IDE gestartet ist
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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