[Lazarus-es] Problema con LoadLibrary

Juan M. Puertas soft.sirius en gmail.com
Jue Ene 15 23:26:10 CET 2015


​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 :-)
​
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150115/5ea30a41/attachment-0002.html>


More information about the Lazarus-es mailing list