[Lazarus-es] Problema con LoadLibrary

Maxi maximiliano.duarte en gmail.com
Vie Ene 16 13:27:50 CET 2015


antes de llamarla debes asegurarte que pudo cargar la libreria,
revisando que no esté en nil swCalc .
Por otro lado probaste de cargarla estaticamente para ver sino no es
un error de tipo de declaracion?

El día 15 de enero de 2015, 19:26, Juan M. Puertas
<soft.sirius en gmail.com> escribió:
> Hola amigos.
> Estoy intentando utilizar una biblioteca escrita en C. La declaración que
> funciona en Delphi de la función que voy a utilizar es la siguiente:
> _________________________________________________________
> function swe_calc_Win(
>                  tjd    : double;    {Julian day number}
>                  ipl         : Integer;   {planet number}
>                  iflag       : Longint;   {flag bits}
>                  var xx      : double;    {first of 6 doubles}
>                  sErr        : PChar      {Error-String}
> ): Longint; stdcall; far; external 'swedll32.dll' name '_swe_calc en 24';
> _________________________________________________________
> Ahora estoy escribiendo con Lazarus un programa que funcione en Windows y en
> Linux de la siguiente manera:
> _________________________________________________________
>
> uses ...dynlibs...
> (...)
>
> type
>   swe_calc = function(tjd    : double;    {Julian day number}
>                  ipl         : Integer;   {planet number}
>                  iflag       : Longint;   {flag bits}
>                  var xx      : double;    {first of 6 doubles}
>                  sErr        : PChar      {Error-String}
> ): Longint; stdcall;
>
> var
>   astro_Handle:TLibHandle=dynlibs.NilHandle;
>   swCalc: swe_calc;
>   FuncResult: longint;
>   xx : array [0..6] of double;
>   err: PChar;
>   (...)
>
>   {$IFDEF Windows}
>     astro_Handle := LoadLibrary('swedll32.dll');
>   {$ELSE}
>     astro_Handle := LoadLibrary('libswe.so');
>   {$ENDIF}
>    swCalc := swe_calc(GetProcedureAddress(astro_Handle, 'swe_calc'));//
> '_swe_calc en 24'));
>   FuncResult:= swCalc(julday,0,SEFLG_MOSEPH,xx[0],err);  // *** ERROR
> __________________________________________________________
> Cuando llamo a la función me da el siguiente error:
> "El proyecto syrius ha lanzado una excepción de la clase 'External:
> SIGSEGV'."
> Mirando el ensamblador aparece:
> "00000000 ??????"
> Es decir; que al parecer el error lo da la biblioteca en C.
> Las posibilidades sobre lo que he hecho mal que se me ocurren son:
> 1) ¿Habré declarado mal xx?
> 2) ¿Tendré que recompilar 'libswe.so' para esta distro de Linux en concreto?
> Agradezco vuestra ayuda :-)
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>



-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog




More information about the Lazarus-es mailing list