Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi results loggen (https://www.delphipraxis.net/205082-results-loggen.html)

venice2 18. Aug 2020 05:31

AW: results loggen
 
Nun gut wie auch immer.
Wer es testen will.

Delphi-Quellcode:
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.
Aufruf Beispiel was von der DLL und oder Exe je nachdem wo man die DLL verwendet zurückgegeben wird.

Delphi-Quellcode:
  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;
Rechtsklick auf das Window öffnet ein PopupMenu wo man angeben kann ob man die Debugausgabe speichern will oder nicht.
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.

KodeZwerg 18. Aug 2020 10:03

AW: results loggen
 
Beim anschauen Deines Quelltext ist mir aufgefallen das
Delphi-Quellcode:
Trace_Loaded
nirgends auf
Delphi-Quellcode:
True
gesetzt wird, somit ist Dein Beispiel Code nicht ausführbar.

venice2 18. Aug 2020 10:14

AW: results loggen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1471986)
Beim anschauen Deines Quelltext ist mir aufgefallen das
Delphi-Quellcode:
Trace_Loaded
nirgends auf
Delphi-Quellcode:
True
gesetzt wird, somit ist Dein Beispiel Code nicht ausführbar.

Schaue dir das Bitmap an dann kannst du sehen das es ausführbar ist.

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.

KodeZwerg 18. Aug 2020 10:20

AW: results loggen
 
Delphi-Quellcode:
if Trace_Loaded then
wird immer scheitern da
Delphi-Quellcode:
Trace_Loaded
immer
Delphi-Quellcode:
False
ist.
Das meinte ich damit und ich glaube Dir das es das macht was Du möchtest ohne es selbst auszuprobieren.

venice2 18. Aug 2020 10:28

AW: results loggen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1471990)
Delphi-Quellcode:
if Trace_Loaded then
wird immer scheitern da
Delphi-Quellcode:
Trace_Loaded
immer
Delphi-Quellcode:
False
ist.
Das meinte ich damit und ich glaube Dir das es das macht was Du möchtest ohne es selbst auszuprobieren.

Manchen Menschen kann man nur mit Bildern etwas veranschaulichen.
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);

KodeZwerg 18. Aug 2020 10:37

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:
function Load_TRACEDLL(const dllfilename: string): BOOL;
und ich von
Delphi-Quellcode:
Trace_Loaded
.
Wenn diese Methode das
Delphi-Quellcode:
Trace_Loaded
setzen würde wäre es nie zu dieser Diskussion gekommen.

Verzeihung und Danke für alles.

venice2 18. Aug 2020 10:40

AW: results loggen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1471992)
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:
function Load_TRACEDLL(const dllfilename: string): BOOL;
und ich von
Delphi-Quellcode:
Trace_Loaded
.
Wenn diese Methode das
Delphi-Quellcode:
Trace_Loaded
setzen würde wäre es nie zu dieser Diskussion gekommen.

Verzeihung und Danke für alles.

Sie setzt es und ist auch logisch!

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;

venice2 18. Aug 2020 11:27

AW: results loggen
 
ganz einfaches sample.

Debug.txt.

Zitat:

Hello World
TForm2 -> btnClick was clicked
-----------------------------
Goodby World
Please Wait 5 Second
Vorausgesetzt es wurde im PopupMenu aktiviert.
Ansonsten wird es nur im Window ausgegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 Uhr.
Seite 4 von 4   « Erste     234   

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