mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-23 08:34:34 +02:00
+ Implemented loading of dynamical libraries
This commit is contained in:
parent
606baed8e2
commit
bfdac9385b
55
rtl/inc/dynlibs.pp
Normal file
55
rtl/inc/dynlibs.pp
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by the Free Pascal development team
|
||||
|
||||
Implements OS-independent loading of dynamic libraries.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$MODE OBJFPC}
|
||||
|
||||
unit dynlibs;
|
||||
|
||||
interface
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Read OS-dependent interface declarations.
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
{$define readinterface}
|
||||
{$i dynlibs.inc}
|
||||
{$undef readinterface}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
OS - Independent declarations.
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
|
||||
Function LoadLibrary(Name : AnsiString) : TLibHandle;
|
||||
Function GetProcedureAddress(Lib : TlibHandle; ProcName : AnsiString) : Pointer;
|
||||
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
|
||||
|
||||
Implementation
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
OS - Independent declarations.
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
{$i dynlibs.inc}
|
||||
|
||||
end.
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2000-08-18 19:15:34 michael
|
||||
+ Implemented loading of dynamical libraries
|
||||
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Makefile generated by fpcmake v0.99.15 [2000/07/02]
|
||||
# Makefile generated by fpcmake v1.00 [2000/07/11]
|
||||
#
|
||||
|
||||
defaultrule: all
|
||||
@ -202,7 +202,7 @@ endif
|
||||
# Targets
|
||||
|
||||
override LOADEROBJECTS+=prt0 cprt0 gprt0 cprt21 gprt21
|
||||
override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings linux ports initc dos crt objects printer graph ggigraph sysutils typinfo math cpu mmx getopts heaptrc lineinfo errors sockets gpm ipc serial
|
||||
override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings linux ports initc dos crt objects printer graph ggigraph sysutils typinfo math cpu mmx getopts heaptrc lineinfo errors sockets gpm ipc serial dl dynlibs
|
||||
override RSTOBJECTS+=math
|
||||
|
||||
# Clean
|
||||
@ -230,7 +230,7 @@ endif
|
||||
|
||||
LIBNAME=libfprtl.so
|
||||
LIBVERSION=1.0
|
||||
SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings linux ports dos crt objects printer sysutils typinfo math cpu mmx getopts heaptrc errors sockets ipc
|
||||
SHAREDLIBUNITOBJECTS=$(SYSTEMUNIT) objpas strings linux ports dos crt objects printer sysutils typinfo math cpu mmx getopts heaptrc errors sockets ipc dl dynlibs
|
||||
|
||||
# Info
|
||||
|
||||
@ -1249,6 +1249,11 @@ linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc
|
||||
|
||||
ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT)
|
||||
|
||||
dl$(PPUEXT) : dl.pp
|
||||
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp dynlibs.inc dl$(PPUEXT)
|
||||
|
||||
|
||||
#
|
||||
# TP7 Compatible RTL Units
|
||||
#
|
||||
|
@ -9,7 +9,8 @@ units=$(SYSTEMUNIT) objpas strings \
|
||||
dos crt objects printer graph ggigraph \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc lineinfo \
|
||||
errors sockets gpm ipc serial
|
||||
errors sockets gpm ipc serial dl dynlibs
|
||||
|
||||
rst=math
|
||||
|
||||
[require]
|
||||
@ -35,7 +36,7 @@ libunits=$(SYSTEMUNIT) objpas strings \
|
||||
dos crt objects printer \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc \
|
||||
errors sockets ipc
|
||||
errors sockets ipc dl dynlibs
|
||||
|
||||
|
||||
[presettings]
|
||||
@ -129,6 +130,11 @@ linux$(PPUEXT) : linux.pp strings$(PPUEXT) $(INC)/textrec.inc $(INC)/filerec.inc
|
||||
|
||||
ports$(PPUEXT) : ports.pp linux$(PPUEXT) objpas$(PPUEXT)
|
||||
|
||||
dl$(PPUEXT) : dl.pp
|
||||
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp dynlibs.inc dl$(PPUEXT) objpas$(PPUEXT)
|
||||
|
||||
|
||||
#
|
||||
# TP7 Compatible RTL Units
|
||||
#
|
||||
|
18
rtl/linux/dl.pp
Normal file
18
rtl/linux/dl.pp
Normal file
@ -0,0 +1,18 @@
|
||||
Unit dl;
|
||||
|
||||
Interface
|
||||
|
||||
Const
|
||||
LibDL = 'dl';
|
||||
|
||||
RTLD_LAZY = $001;
|
||||
RTLD_NOW = $002;
|
||||
RTLD_BINDING_MASK = $003;
|
||||
|
||||
Function dlopen(Name : PChar; Flags : longint) : Pointer; cdecl; external libdl;
|
||||
FUnction dlsym(Lib : Pointer; Name : Pchar) : Pointer; cdecl; external Libdl;
|
||||
Function dlclose(Lib : Pointer) : Longint; cdecl; external libdl;
|
||||
|
||||
implementation
|
||||
|
||||
end.
|
62
rtl/linux/dynlibs.inc
Normal file
62
rtl/linux/dynlibs.inc
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by the Free Pascal development team
|
||||
|
||||
Implement OS-dependent part of dynamic library loading.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$ifdef readinterface}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Interface declarations
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
Type
|
||||
TLibHandle = Pointer;
|
||||
|
||||
Const
|
||||
NilHandle = Nil;
|
||||
|
||||
{$else}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Implementation section
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
uses dl;
|
||||
|
||||
Function LoadLibrary(Name : AnsiString) : TLibHandle;
|
||||
|
||||
begin
|
||||
Result:=dlopen(Pchar(Name),RTLD_LAZY);
|
||||
end;
|
||||
|
||||
Function GetProcedureAddress(Lib : TLibHandle; ProcName : AnsiString) : Pointer;
|
||||
|
||||
begin
|
||||
Result:=dlsym(lib,pchar(ProcName));
|
||||
end;
|
||||
|
||||
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
|
||||
|
||||
begin
|
||||
Result:=dlClose(Lib)=0;
|
||||
end;
|
||||
|
||||
{$endif}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2000-08-18 19:15:34 michael
|
||||
+ Implemented loading of dynamical libraries
|
||||
|
||||
}
|
62
rtl/template/dynlibs.inc
Normal file
62
rtl/template/dynlibs.inc
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by the Free Pascal development team
|
||||
|
||||
Implements OS dependent part for loading of dynamic libraries.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
|
||||
{$ifdef readinterface}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Interface declarations
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
Type
|
||||
TLibHandle = Longint;
|
||||
|
||||
Const
|
||||
NilHandle = 0;
|
||||
|
||||
{$else}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Implementation section
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
|
||||
Function LoadLibrary(Name : AnsiString) : TlibHandle;
|
||||
|
||||
begin
|
||||
Result:=NilHandle;
|
||||
end;
|
||||
|
||||
Function GetProcedureAddress(Lib : TLibHandle; ProcName : AnsiString) : Pointer;
|
||||
|
||||
begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
|
||||
|
||||
begin
|
||||
Result:=False;
|
||||
end;
|
||||
|
||||
{$endif}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2000-08-18 19:15:34 michael
|
||||
+ Implemented loading of dynamical libraries
|
||||
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# Makefile generated by fpcmake v0.99.15 [2000/07/02]
|
||||
# Makefile generated by fpcmake v1.00 [2000/07/11]
|
||||
#
|
||||
|
||||
defaultrule: all
|
||||
@ -198,7 +198,7 @@ endif
|
||||
# Targets
|
||||
|
||||
override LOADEROBJECTS+=wprt0 wdllprt0
|
||||
override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings windows ole2 opengl32 os_types winsock initc dos crt objects graph sysutils typinfo math cpu mmx getopts heaptrc lineinfo wincrt winmouse sockets printer
|
||||
override UNITOBJECTS+=$(SYSTEMUNIT) objpas strings windows ole2 opengl32 os_types winsock initc dos crt objects graph sysutils typinfo math cpu mmx getopts heaptrc lineinfo wincrt winmouse sockets printer dynlibs
|
||||
override RSTOBJECTS+=math
|
||||
|
||||
# Clean
|
||||
@ -1248,6 +1248,8 @@ wincrt$(PPUEXT) : wincrt.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
|
||||
|
||||
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
|
||||
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
|
||||
|
||||
#
|
||||
# TP7 Compatible RTL Units
|
||||
#
|
||||
|
@ -9,7 +9,8 @@ units=$(SYSTEMUNIT) objpas strings \
|
||||
dos crt objects graph \
|
||||
sysutils typinfo math \
|
||||
cpu mmx getopts heaptrc lineinfo \
|
||||
wincrt winmouse sockets printer
|
||||
wincrt winmouse sockets printer dynlibs
|
||||
|
||||
rst=math
|
||||
|
||||
[require]
|
||||
@ -121,6 +122,8 @@ wincrt$(PPUEXT) : wincrt.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
|
||||
|
||||
winmouse$(PPUEXT) : winmouse.pp $(SYSTEMPPU) windows$(PPUEXT) graph$(PPUEXT)
|
||||
|
||||
dynlibs$(PPUEXT) : $(INC)/dynlibs.pp windows$(PPUEXT)
|
||||
|
||||
#
|
||||
# TP7 Compatible RTL Units
|
||||
#
|
||||
|
63
rtl/win32/dynlibs.inc
Normal file
63
rtl/win32/dynlibs.inc
Normal file
@ -0,0 +1,63 @@
|
||||
{
|
||||
$Id$
|
||||
This file is part of the Free Pascal run time library.
|
||||
Copyright (c) 1999-2000 by the Free Pascal development team
|
||||
|
||||
Implements OS dependent part for loading of dynamic libraries.
|
||||
|
||||
See the file COPYING.FPC, included in this distribution,
|
||||
for details about the copyright.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
|
||||
{$ifdef readinterface}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Interface declarations
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
Type
|
||||
TLibHandle = Longint;
|
||||
|
||||
Const
|
||||
NilHandle = 0;
|
||||
|
||||
{$else}
|
||||
|
||||
{ ---------------------------------------------------------------------
|
||||
Implementation section
|
||||
---------------------------------------------------------------------}
|
||||
|
||||
Uses windows;
|
||||
|
||||
Function LoadLibrary(Name : AnsiString) : TlibHandle;
|
||||
|
||||
begin
|
||||
Result:=Windows.LoadLibrary(PChar(Name));
|
||||
end;
|
||||
|
||||
Function GetProcedureAddress(Lib : TLibHandle; ProcName : AnsiString) : Pointer;
|
||||
|
||||
begin
|
||||
Result:=Windows.GetProcAddress(Lib,PChar(ProcName));
|
||||
end;
|
||||
|
||||
Function UnloadLibrary(Lib : TLibHandle) : Boolean;
|
||||
|
||||
begin
|
||||
Result:=FreeLibrary(Lib);
|
||||
end;
|
||||
|
||||
{$endif}
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2000-08-18 19:15:34 michael
|
||||
+ Implemented loading of dynamical libraries
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user