Thema: Delphi results loggen

Einzelnen Beitrag anzeigen

venice2
(Gast)

n/a Beiträge
 
#31

AW: results loggen

  Alt 18. Aug 2020, 05:31
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.

Geändert von venice2 (19. Aug 2020 um 00:41 Uhr)
  Mit Zitat antworten Zitat