Hello everybody. Good news for fpc: => this examples (with source+libraries+binaries freeBSD 64 bit) =>
>> https://sites.google.com/site/fiensprototyping/bsd_dynlib_test.tar.gz Show that on freeBSD fpc-applications can dynamically load and run fpc and C libraries. 1) Test with fpc libraries: ___________________________ - The fpc library:=> library test ; {$mode objfpc} procedure fpctest ;cdecl; begin writeln('Ok, it works for fpc library...'); end; exports fpctest name 'fpctest'; begin end. __________________________ - The fpc application:=> program getadrproc; uses dynlibs, SysUtils ; var fpctest: procedure() ; cdecl; myhandle:TLibHandle=dynlibs.NilHandle; ordir : string; begin ordir := (ExtractFilePath(ParamStr(0))); myhandle:=DynLibs.LoadLibrary(ordir + 'libtest.so'); if myhandle <> dynlibs.NilHandle then writeln('OK library loaded') else writeln('library NOT loaded') ; Pointer(fpctest):=DynLibs.GetProcedureAddress(myhandle,PChar('fpctest')); if Pointer(fpctest) <> nil then writeln('OK address loaded') else writeln('address NOT loaded') ; fpctest(); DynLibs.UnloadLibrary(myhandle); end. ///////////// On my freeBSD 10 64 bit, it works ;-) _____________________________ 2) Test with C libraries: ___________________________ - The fpc application:=> program getadrproc_c; uses dynlibs, SysUtils, CTypes ; var Pa_Initialize: function():cint32 ; cdecl; Pa_Terminate: function():cint32 ; cdecl; pahandle:TLibHandle=dynlibs.NilHandle; ordir : string; begin ordir := ExtractFilePath(ParamStr(0)); {$IF DEFINED(linux)} pahandle:=DynLibs.LoadLibrary(ordir + 'libportaudio_lin64.so'); {$endif} {$IF DEFINED(freebsd)} pahandle:=DynLibs.LoadLibrary(ordir + 'libportaudio-bsd64.so'); {$endif} if pahandle <> dynlibs.NilHandle then writeln('OK library loaded') else writeln('library NOT loaded') ; Pointer(Pa_Initialize):=DynLibs.GetProcedureAddress(pahandle,PChar('Pa_Initialize')); if Pointer(Pa_Initialize) <> nil then writeln('OK Pa_Initialize loaded') else writeln('Pa_Initialize NOT loaded') ; Pointer(Pa_Terminate):=DynLibs.GetProcedureAddress(pahandle,PChar('Pa_Terminate')); if Pointer(Pa_Terminate) <> nil then writeln('OK Pa_Terminate loaded') else writeln('Pa_Terminate NOT loaded') ; Pa_Initialize(); Pa_Terminate(); DynLibs.UnloadLibrary(pahandle); end. //////////////// And it works too on freeBSD 10 64 bit ;-) >> Conclusion: I have to check my code, why do i get that error message on >> freeBSD and not in Linux => lot of hair and nights to loose. PS: Sorry to disturb (and it would be easier if fpc was the guilty...) Thanks. Fred ----- Many thanks ;-) -- View this message in context: http://free-pascal-general.1045716.n5.nabble.com/freeBSD-and-GetProcedureAddress-tp5719977p5719983.html Sent from the Free Pascal - General mailing list archive at Nabble.com. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal