Debug Console oder ähnlich
Habe ja meinen kleinen Wrapper für verschiedene Visualisierungs Plugins.
Mein Problem ist nun das es vorkommen kann das andere Programm hängen weil irgendein Plugin nicht richtig funktioniert oder deren Threads nicht beenden. Hat jemand ein Beispiel oder kann mir sagen wie ich am besten eine Console generieren kann über der ich zur Laufzeit diverse Informationen direkt an dem User aus meiner DLL übergeben kann? Am besten wäre es mit einem Compiler Schalter den man unter Bedingter Kompelierung oder ähnlich eingeben kann um das Debug Fenster zu öffnen. Würd mich über Hilfe freun. Sorry wenn ihr mich für blöd haltet. Habe mich mit dieser Problematik in Delphi noch nicht beschäftigt. In VB habe ich so etwas für meinen Player erstellt. Eine externe Anwendung welche über einen Schalter sich mit meiner Anwendung verbindet. Vorrausgesetzt sie ist vorher gestartet. gruss |
AW: Debug Console oder ähnlich
CreateConsole und dann einfach über Write/WriteLn den Text ausgeben.
Aber das bringt nur was, wenn noch keine Konsole in der Anwendung existiert. Ansonsten kannst du dir ja auch einfach eine Form erstellen, mit einem Memo drauf. |
AW: Debug Console oder ähnlich
Zitat:
Siehe eintrag unter bedingter Compilierung Ich wollte eigentlich kein Fenster oder ähnliches in meine DLL einbauen sondern die Messagen an eine Anwendung schicken ohne selbst an der DLL etwas zu ändern .. abgesehen von den Messagen die ich nach außen weiterleite. gruss |
AW: Debug Console oder ähnlich
OutputDebugString ist eine Möglichkeit, die auch in der Delphi IDE unterstützt wird. Man kann auch externe Anwendungen zur Anzeige der Debug-Nachrichten nutzen.
|
AW: Debug Console oder ähnlich
Zitat:
TRACEMODE = 1 Die Frage wäre dann nur wie ich in Delphi eine bedingte Compilierung durchführen kann. Hier mal der Quelltext den ich in meinem Programm verwende um mit dem Tracer zu kommunizieren.
Code:
Um was es mir geht ist diese Abfrage
Option Explicit
... Public Sub Assert(ByVal condition As Boolean) End Sub #End If
Code:
Welche die Bedingte Compilierung auslöst..
#If TRACEMODE = 1 Then
Also wie könnte ich so einen Schalter innerhalb Delphi setzen.. Die Übersetzung des Quelltextes spielt keine Rolle das ist ein leichtes für mich. Die Message die gesendet wird sieht in etwa so aus.
Code:
Und findet nur verwendung wenn der Schalter gesetzt sowie das Handle vom Tracer gefunden wird.
Trace "Form_Load Error", "", "Error", err.Number, err.Description
Ansonsten springt er in Assert rein ... tut dann quasi nichts. Ok hab die Schalter gefunden.. {$IFDEF ..} {$ELSE} {$ENDIF} Werd mich dann mal drangeben. gruss |
AW: Debug Console oder ähnlich
sorry wenn ich pusche
warum kann ich nun über den Schalter keine Funktionen mehr setzen ?
Delphi-Quellcode:
Sind Unterhalb vorhanden werden aber auf grund des Schalters nicht mehr erkannt.
unit uTracer;
interface uses Windows, Messages, Classes, Variants; const THISAPPID = 'myTRACER'; var m_Hwnd : HWND; m_bInitialised: BOOL; function FindTraceWindow: Integer; function DoTrace: Boolean; procedure SendTraceMessage(args: array of Variant); function IsTraceWindow(WinHandle: HWND): Boolean; implementation {$IFDEF TRACEMODE = 1} Zitat:
|
AW: Debug Console oder ähnlich
Delphi-Quellcode:
{$IFDEF TRACEMODE = 1}
function FindTraceWindow: Integer; {$ENDIF} |
AW: Debug Console oder ähnlich
Zitat:
Delphi-Quellcode:
Der aufruf würde so erfolgen
unit uTracer;
interface uses Windows, Messages, Forms, Classes, Variants, SysUtils; .
Delphi-Quellcode:
Wie gesagt ich komme nur in die untere Trace procedure hinein..
SetLength(mytest,3);
mytest[0] := 'BASSVIS_Init '; mytest[1] := GlobalVisInit; mytest[2] := MainHandle; Trace(mytest); sollte aber die obere sein ;) wenn ich es jetzt so mache wie du vorgeschlagen hast.
Delphi-Quellcode:
nicht genügend forward .. blablabla
{$IFDEF TRACEMODE = 1}
procedure Trace(args : array of Variant); begin If (DoTrace) Then SendTraceMessage(args); end; {$ENDIF} bei der oben declarierten procedure um sie öffentlich zu machen gruss |
AW: Debug Console oder ähnlich
ich fürchte ich komm nicht mehr mit...
der {$IFDEF} Kram sorgt für eine bedingte kompilierung, ja nach Schalter kommen verschiedene "Programme" raus wenn Du TRACEMODE <> 1 definiert hast wird der Teil {$IFDEF TRACEMODE = 1} überhaupt nicht aufgenommen beim kompilieren. Falls ich Dich richtig verstanden habe brauchst Du keine Kompilerschalter sondern Parametrisierte Aufrufe die dann verschieden verzweigen? |
AW: Debug Console oder ähnlich
Zitat:
Wird dieser nicht gefunden wird auch nichts ins Logbuch eingetragen So schützt sich diese selbst vor unnötigen zugriffen von außen. Ich habe in meiner DLL unter Parameter "TRACEMODE = 1" eingegeben eigentlich sollte der Compiler das erkennen während der laufzeit und darauf hin entscheiden ob er den Codeteil freigibt also verwendet oder nicht. Vorrausgesetzt die Anwendung läuft dann werden die Daten in das Fenster geschickt und dort ausgewertet. in vb sieht mein compiler schalter so aus! #If TRACEMODE = 1 Then #Else #End If und steht genau an der gleichen stelle wie hier im Code übergeben. Wie gesagt habe mich mit den Schaltern in Delphi noch nicht beschäftigt. ;) Nochmal ein ganz kleines Beispiel! Zitat:
Code:
So ist es veranschaulicht was bzw.. wofür die Schalter stehen.
Option Explicit
#Const MitHinein = True Public Sub Main Debug.Print "Dieser Text ist immer zu sehen" #If MitHinein Then Debug.Print "Dieser Text ist nur zu sehen, wenn " & _ "'MitHinein' entsprechend gesetzt wurde." #End If #If False Then Debug.Print "Dieser Text ist nie zu sehen." #End If Debug.Print "Das war es schon." End Sub Ist der Schalter unter Parameter im Debugger Dialog gesetzt muss der ganze obere Teil des Quelltextes aktiv sein Andernfalls werden die beiden unteren proceduren verwendet die dann nichts tun... gruss Emil |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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