Zitat:
So ganz ohne Code
Ganz ohne. Hast du ihn für Delphi übersehen?
Eine
DLL Dynamisch zu laden ist nicht das Problem und damit geht es auch. (ganz so dumm bin ich dann doch nicht!)
Nur wie gesagt verstehe nicht das es mit einer statisch geladenen
DLL in C++ funktioniert und in Delphi halt nicht.
Delphi-Quellcode:
unit Dynamic_Trace;
interface
uses Windows;
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;
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;
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:
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');
WinprocessMessages;
until HWND <> 0;
end;
end;
end;
Und der Aufruf.
Delphi-Quellcode:
if Trace_Loaded then
Trace(PWideChar('Init ' + 'Value = ' + BoolToStr(bInit)));
So startet die Anwendung auch wenn die
DLL nicht existiert.
Aber meine Frage ist damit nicht beantwortet denn ich verwende so Dynamisches und kein statisches laden.