<div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">​​Muchas gracias Maxi. :-)<br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Lo he resuelto asignando un valor a err.<br></div><div class="gmail_default" style="font-family:verdana,sans-serif">Ahora todo va bien, pero al salir de la función en la que se encuentra la llamada a la biblioteca en C, (en el end;) me da el error: "El proyecto syrius ha lanzado una excepción de la clase 'External: SIGSEGV'."<br></div><br><div class="gmail_default" style="font-family:verdana,sans-serif"> ¿Alguien sabe por qué pasa esto?.<br></div><div class="gmail_default" style="font-family:verdana,sans-serif"> Gracias.<br></div> <br><div class="gmail_default" style="font-family:verdana,sans-serif"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 16 de enero de 2015, 13:27, Maxi <span dir="ltr"><<a href="mailto:maximiliano.duarte@gmail.com" target="_blank">maximiliano.duarte@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">antes de llamarla debes asegurarte que pudo cargar la libreria,<br>
revisando que no esté en nil swCalc .<br>
Por otro lado probaste de cargarla estaticamente para ver sino no es<br>
un error de tipo de declaracion?<br>
<br>
El día 15 de enero de 2015, 19:26, Juan M. Puertas<br>
<<a href="mailto:soft.sirius@gmail.com">soft.sirius@gmail.com</a>> escribió:<br>
<div><div class="h5">> Hola amigos.<br>
> Estoy intentando utilizar una biblioteca escrita en C. La declaración que<br>
> funciona en Delphi de la función que voy a utilizar es la siguiente:<br>
> _________________________________________________________<br>
> function swe_calc_Win(<br>
>                  tjd    : double;    {Julian day number}<br>
>                  ipl         : Integer;   {planet number}<br>
>                  iflag       : Longint;   {flag bits}<br>
>                  var xx      : double;    {first of 6 doubles}<br>
>                  sErr        : PChar      {Error-String}<br>
> ): Longint; stdcall; far; external 'swedll32.dll' name '_swe_calc@24';<br>
> _________________________________________________________<br>
> Ahora estoy escribiendo con Lazarus un programa que funcione en Windows y en<br>
> Linux de la siguiente manera:<br>
> _________________________________________________________<br>
><br>
> uses ...dynlibs...<br>
> (...)<br>
><br>
> type<br>
>   swe_calc = function(tjd    : double;    {Julian day number}<br>
>                  ipl         : Integer;   {planet number}<br>
>                  iflag       : Longint;   {flag bits}<br>
>                  var xx      : double;    {first of 6 doubles}<br>
>                  sErr        : PChar      {Error-String}<br>
> ): Longint; stdcall;<br>
><br>
> var<br>
>   astro_Handle:TLibHandle=dynlibs.NilHandle;<br>
>   swCalc: swe_calc;<br>
>   FuncResult: longint;<br>
>   xx : array [0..6] of double;<br>
>   err: PChar;<br>
>   (...)<br>
><br>
>   {$IFDEF Windows}<br>
>     astro_Handle := LoadLibrary('swedll32.dll');<br>
>   {$ELSE}<br>
>     astro_Handle := LoadLibrary('libswe.so');<br>
>   {$ENDIF}<br>
>    swCalc := swe_calc(GetProcedureAddress(astro_Handle, 'swe_calc'));//<br>
> '_swe_calc@24'));<br>
>   FuncResult:= swCalc(julday,0,SEFLG_MOSEPH,xx[0],err);  // *** ERROR<br>
> __________________________________________________________<br>
> Cuando llamo a la función me da el siguiente error:<br>
> "El proyecto syrius ha lanzado una excepción de la clase 'External:<br>
> SIGSEGV'."<br>
> Mirando el ensamblador aparece:<br>
> "00000000 ??????"<br>
> Es decir; que al parecer el error lo da la biblioteca en C.<br>
> Las posibilidades sobre lo que he hecho mal que se me ocurren son:<br>
> 1) ¿Habré declarado mal xx?<br>
> 2) ¿Tendré que recompilar 'libswe.so' para esta distro de Linux en concreto?<br>
> Agradezco vuestra ayuda :-)<br>
><br>
><br>
</div></div>> _______________________________________________<br>
> Lazarus-es mailing list<br>
> <a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
> <a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
><br>
<br>
<br>
<br>
--<br>
El que pregunta aprende, y el que contesta aprende a responder.<br>
<br>
No a la obsolecencia programada:<br>
<a href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml" target="_blank">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a><br>
<br>
Linux User #495070<br>
<a href="http://domonetic.com/blog" target="_blank">http://domonetic.com/blog</a><br>
<br>
_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><i><font size="1"><span>Nota: Por problemas con el e-mail. Puede que recibas de nuevo este mensaje
 en un tiempo.</span></font></i></div>
</div>