Einzelnen Beitrag anzeigen

scp

Registriert seit: 31. Okt 2003
1.120 Beiträge
 
Delphi 7 Personal
 
#1

DLLProc richtig "erweitern"

  Alt 27. Jul 2004, 12:37
Delphi-Quellcode:
type
  TDllProc = procedure(Reason: Integer); {stdcall; ???}

var
  DLLProcNext: TDllProc = nil;
  
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:
      ;
   end;
   if Assigned(DLLProcNext) then DLLProcNext(Reason);
end;

begin
  DLLProcNext := Pointer(InterlockedExchange(Integer(@DLLProc), Integer(@DLLMain)));
  DLLMain(DLL_PROCESS_ATTACH);
end.
Welche Variante ist nun die richtige?

Ich habe verschiedene Varianten von Nico und Assarbad gesehen. Bei der einen wird stdcall verwendet, bei der anderen nicht. Assarbad verwendet InterlockedExchange, hat aber bei dem Integer(@DLLProc) kein @ stehen, was sich bei D7 Personal nicht kompilieren lässt.
Nico hat bei spotlite.de wiederum kein InterlockedExchange verwendet, sondern
TDllProc(DLLProc) := DLLMain; PS: In D7 ist TDllProc bereits ohne stdcall deklariert.
  Mit Zitat antworten Zitat