Hallo zusammen!
Ich habe ein seltsames Problem mit einer DLL.
Folgender (einfacher) Code für die DLL:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| uses SysUtils, Classes, Windows;
{$IFNDEF CONDITIONALDEFINE} 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
PS: Ich habe das auch schon in anderen Foren gepostet, bisher wurde aber noch keine Lösung gefunden.
www.delphipraxis.net...st688710.html#688710
forum.dsdt.info/view....php?p=204501#204501