<font face="tahoma,sans-serif">Hola,</font><div><font face="tahoma, sans-serif"><br></font><div><font face="tahoma,sans-serif">Yo tuve que hacer algo similar entre una DLL en C y Delphi 7.</font></div><div><font face="tahoma,sans-serif">La solución (en mi caso) fue definir en la DLL el parametro como "char *" y en Delphi utilizar un PChar previamente dimensionado al tamaño máximo, como hacen en C.</font></div>
<div><div><font face="tahoma, sans-serif">Mira aqui:</font></div><div><a href="http://delphi.wikia.com/wiki/Creating_DLLs">http://delphi.wikia.com/wiki/Creating_DLLs</a></div><div><a href="http://www.tek-tips.com/faqs.cfm?fid=7472">http://www.tek-tips.com/faqs.cfm?fid=7472</a></div>
<div>Aparentemente el éxito de la conversión depende de que reserves el espacio para el resultado antes de hacer la llamada.</div></div><div><br></div><div><br></div><div><font face="tahoma,sans-serif">Como segunda opcion, si la DLL también está en Delphi, la unit ShareMem (no se si está disponible en Lazarus, soy nuevo en esto) te permite pasar strings sin preocuparte. Lo mismo hace FastMM.</font></div>
<div><font face="tahoma,sans-serif">La contra de este segundo método es que la DLL no es compatible con otros lenguajes, perdiendo la "gracia" de poner la rutina en una DLL.</font></div><div><br></div><div><span style="font-family:tahoma,sans-serif">Suerte con eso.</span></div>
<div><br><div class="gmail_quote">2012/9/29 José Mejuto <span dir="ltr"><<a href="mailto:joshyfun@gmail.com" target="_blank">joshyfun@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
El 27/09/2012 19:48, Maxi escribió:<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Necesite devolver desde una dll que es un robot que lee , con un a<br>
componente indy una pagina para extraer datos.<br>
Hasta ahora anda bien pero debo guardar la pagina consultada, el texto<br>
html en una tabla. Pero se que el paso de string largos trae<br>
problemas.<br>
Como es mejor pasar de vuelta este dato?<br>
<br>
</blockquote>
<br></div>
Hola,<br>
<br>
No puedes devolver "strings" de pascal, pero noda te impide devolver un bloque de memoria con el texto y otra variable que indique el tamaño del mismo.<br>
<br>
Básicamente tienes que enviarte entre la dll y el programa principal bloques de memoria y recordar que quien (la dll o la aplicación) haya pedido el bloque tiene que liberarlo, no puedes mezclar peticiones y liberaciones. Si necesitaras mezclarlas, se puede hacer, pero se complica la cosa un poco.<div class="HOEnZb">
<div class="h5"><br>
<br>
______________________________<u></u>_________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org" target="_blank">Lazarus-es@lists.lazarus.<u></u>freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" target="_blank">http://lists.lazarus.<u></u>freepascal.org/mailman/<u></u>listinfo/lazarus-es</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><span style="font-family:tahoma,sans-serif">Try not to become a man of success but rather to become a man of value. <i>Albert Einstein</i></span></div>
<br>
</div></div>