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.