![]() |
AW: results loggen
Nun gut wie auch immer.
Wer es testen will.
Delphi-Quellcode:
Aufruf Beispiel was von der DLL und oder Exe je nachdem wo man die DLL verwendet zurückgegeben wird.
unit Dynamic_Trace;
interface uses Windows, Messages; const dllfile = 'Tracer.dll'; var TRACE_Handle: Thandle = 0; Trace_Loaded: Bool = false; Trace: function(Msg: PWideChar): LongInt; stdcall; function Load_TRACEDLL(const dllfilename: string): BOOL; function GetTraceWinHandle: BOOL; procedure Unload_TRACEDLL; implementation function Load_TRACEDLL(const dllfilename: string): BOOL; var oldmode: integer; begin if TRACE_Handle <> 0 then Result := true else begin oldmode := SetErrorMode($8001); TRACE_Handle := LoadLibrary(PWideChar(dllfilename)); SetErrorMode(oldmode); if TRACE_Handle <> 0 then begin @Trace := GetProcAddress(TRACE_Handle, PAnsiChar('Trace')); if (@Trace = nil) then begin FreeLibrary(TRACE_Handle); TRACE_Handle := 0; end; end; Result := (TRACE_Handle <> 0); end; end; function GetTraceWinHandle: BOOL; var HWND: DWord; begin HWND := FindWindow('TRACER', 'TRACER'); Result := HWND <> 0; end; procedure Unload_TRACEDLL; var HWND: DWord; begin if TRACE_Handle <> 0 then begin HWND := FindWindow('TRACER', 'TRACER'); if HWND <> 0 then begin TRACE_Handle := SendMessage(HWND, WM_DESTROY, 0, 0); Trace_Loaded := false; end else begin TRACE_Handle := 0; Trace_Loaded := false; end; end; end; end.
Delphi-Quellcode:
Rechtsklick auf das Window öffnet ein PopupMenu wo man angeben kann ob man die Debugausgabe speichern will oder nicht.
if Trace_Loaded then
begin if GetTraceWinHandle then // prüfen falls das Window beendet wurde. begin Trace(PWideChar('BASSVIS_Init - Alias(SONIQUEVIS_Init) ' + ' Container Handle = ' + IntToStr(VisContainerHandle) + ' Result = ' + IIF(Result, 'TRUE', 'FALSE'))); Trace('------------------------- '); end; end; Im Archiv ist eine Debug.txt Datei enthalten kann man sich anschauen oder auch nicht, wie die Resultate ausgeben werden. Wenn man das Fenster nicht mehr sehen möchte einfach die DLL umbenennen. (Tracer.dll zu Tracer.dl) dann muss man nicht den Quelltext ändern. Wenn diese nicht gefunden wird Arbeitet sie logischerweise auch nicht. Deshalb Dynamisch geladen. Die unit Dynamic_Trace; muss in jedem Projekt eingebunden werden. |
AW: results loggen
Beim anschauen Deines Quelltext ist mir aufgefallen das
Delphi-Quellcode:
nirgends auf
Trace_Loaded
Delphi-Quellcode:
gesetzt wird, somit ist Dein Beispiel Code nicht ausführbar.
True
|
AW: results loggen
Zitat:
Das!
Delphi-Quellcode:
Result := (TRACE_Handle <> 0);
ist nicht True? Sollte mich wundern. Es sei denn das Handle wird nicht gefunden. Sollte mich aber ebenfalls wundern. Schaue bitte nochmal etwas genauer hin. |
AW: results loggen
Delphi-Quellcode:
wird immer scheitern da
if Trace_Loaded then
Delphi-Quellcode:
immer
Trace_Loaded
Delphi-Quellcode:
ist.
False
Das meinte ich damit und ich glaube Dir das es das macht was Du möchtest ohne es selbst auszuprobieren. |
AW: results loggen
Zitat:
Bitte sehr! Es kann doch nicht so schwer zu erkennen sein das diese Abfrage "True" ergibt wenn das Handle gefunden wurde. bzw. <> 0
Delphi-Quellcode:
Result := (TRACE_Handle <> 0);
|
AW: results loggen
Ja ne, iss klar. Wir reden aneinander vorbei, ich wollte Dich lediglich auf das offensichtliche Aufmerksam machen aber bin gescheitert und belasse es dabei.
Du redest von
Delphi-Quellcode:
und ich von
function Load_TRACEDLL(const dllfilename: string): BOOL;
Delphi-Quellcode:
.
Trace_Loaded
Wenn diese Methode das
Delphi-Quellcode:
setzen würde wäre es nie zu dieser Diskussion gekommen.
Trace_Loaded
Verzeihung und Danke für alles. |
AW: results loggen
Zitat:
Nun ja eigentlich sollte das klar und ersichtlich sein aber gut ich kann es gerne nochmal ausführlicher machen. Was ist die Rückgabe von Load_TRACEDLL ? Richtig.. BOOL. Also ist es doch logisch das ich damit mein Trace_Loaded verknüpfe oder?
Delphi-Quellcode:
Trace_Loaded := Load_TRACEDLL(ExtractFilePath(paramstr(0)) + dllfile);
Deshalb sagte ich es ist True.. abhängig davon ob die Funktion ein True zurück gibt.
Delphi-Quellcode:
function BASSVIS_Init(Kind: TBASSVIS_KIND_T; MainHandle: HWND; UseDebug: BOOL = false): BOOL; stdcall;
var HWND: DWord; begin Result := False; if UseDebug then begin if not Trace_Loaded then begin Trace_Loaded := Load_TRACEDLL(ExtractFilePath(paramstr(0)) + dllfile); if Trace_Loaded then begin Trace(''); repeat HWND := FindWindow('TRACER', 'TRACER'); // warten bis das Fenster erstellt wurde WinprocessMessages; until HWND <> 0; end; end; end else if Trace_Loaded then Unload_TRACEDLL; // .... end; |
AW: results loggen
ganz einfaches sample.
Debug.txt. Zitat:
Ansonsten wird es nur im Window ausgegeben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 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