Hallo zusammen!
Ich habe ein seltsames Problem mit einer
DLL.
Folgender (einfacher) Code für die
DLL:
Delphi-Quellcode:
uses
SysUtils,
Classes,
Windows;
{$IFNDEF CONDITIONALDEFINE}
// type def for Delphi 2-5
type
TDLLProc = procedure(Reason: Integer);
{$ENDIF}
var
DLLProcNext: TDLLProc;
function InitTest():integer; stdcall;
begin
result:=0;
end;
procedure DLLMain(Reason: Integer); stdcall;
begin
case Reason of
DLL_PROCESS_ATTACH:
begin
DisableThreadLibraryCalls(hInstance);
end;
DLL_THREAD_ATTACH:
;
DLL_THREAD_DETACH:
;
DLL_PROCESS_DETACH:
begin
end;
end;
if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;
exports
InitTest;
begin
DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc), Integer(@DLLMain)));
DLLMain(DLL_PROCESS_ATTACH);
end.
Nun habe ich an der Stelle "case Reason of" einen Breakpoint gesetzt.
Beim Laden der
DLL erhalte ich (wie erwartet) eine 1.
Beende ich jetzt das Programm, das die
DLL aufruft, so hält die Programmausführung zwar am Breakpoint, "Reason" enthält dann aber einen sehr hohen Wert (also nicht wie erwartet 0).
Kann sich das jemand erklären? Mache ich was falsch?
Ist der Code, der die
DLL nützt auch noch interessant?
Gruß und vielen Dank,
StTüff