+ DLL Hooks for the four callings added

This commit is contained in:
pierre 1999-11-20 00:16:44 +00:00
parent bb6dc0cee8
commit 6f95642db5

View File

@ -74,6 +74,15 @@ var
{ Thread count for DLL }
const
Thread_count : longint = 0;
type
TDLL_Process_Entry_Hook = function (dllparam : longint) : longbool;
TDLL_Entry_Hook = procedure (dllparam : longint);
const
Dll_Process_Attach_Hook : TDLL_Process_Entry_Hook = nil;
Dll_Process_Detach_Hook : TDLL_Entry_Hook = nil;
Dll_Thread_Attach_Hook : TDLL_Entry_Hook = nil;
Dll_Thread_Detach_Hook : TDLL_Entry_Hook = nil;
implementation
@ -807,7 +816,9 @@ Const
DLL_PROCESS_DETACH = 0;
DLL_THREAD_DETACH = 3;
procedure Dll_entry;[public, alias : '_FPC_DLL_Entry'];
function Dll_entry : longbool;[public, alias : '_FPC_DLL_Entry'];
var
res : longbool;
begin
IsLibrary:=true;
case DLLreason of
@ -819,18 +830,40 @@ procedure Dll_entry;[public, alias : '_FPC_DLL_Entry'];
xorl %edi,%edi
movw %ss,%di
movl %edi,_SS
call PASCALMAIN
end;
if assigned(Dll_Process_Attach_Hook) then
begin
res:=Dll_Process_Attach_Hook(DllParam);
if not res then
begin
Dll_entry:=false;
exit;
end;
end;
PASCALMAIN;
Dll_entry:=true;
end;
DLL_THREAD_ATTACH :
inc(Thread_count);
begin
inc(Thread_count);
if assigned(Dll_Thread_Attach_Hook) then
Dll_Thread_Attach_Hook(DllParam);
Dll_entry:=true; { return value is ignored }
end;
DLL_THREAD_DETACH :
dec(Thread_count);
begin
dec(Thread_count);
if assigned(Dll_Thread_Detach_Hook) then
Dll_Thread_Detach_Hook(DllParam);
Dll_entry:=true; { return value is ignored }
end;
DLL_PROCESS_DETACH :
begin
asm
call FPC_DO_EXIT
end;
inc(Thread_count);
Dll_entry:=true; { return value is ignored }
FPC_DO_EXIT;
if assigned(Dll_Process_Detach_Hook) then
Dll_Process_Detach_Hook(DllParam);
end;
end;
end;
@ -1128,7 +1161,10 @@ end.
{
$Log$
Revision 1.49 1999-11-18 22:19:57 pierre
Revision 1.50 1999-11-20 00:16:44 pierre
+ DLL Hooks for the four callings added
Revision 1.49 1999/11/18 22:19:57 pierre
* bug fix for web bug703 and 704
Revision 1.48 1999/11/09 22:34:00 pierre