[Lazarus-es] Convenciones de librerías

José Mejuto joshyfun en gmail.com
Dom Abr 10 13:18:52 CEST 2011


Hello Giuseppe,

Sunday, April 10, 2011, 1:56:17 AM, you wrote:

>> Has creado una librería LCL, esto suele ser un problema ya que la LCL
>> no suele funcionar bien en librerías, vamos que lo de mostrar forms en
>> una librería y cosas así, no suele funcionar correctamente (quizá en
>> Windows si).
GLP> ¿Entonces no podría mostrar un mensaje desde la DLL?

Un mensaje si, y si es para Windows sólo siempre te queda usar la
WinAPI para cosas sencillas como un MessageBox.

>> Para 32 bits usa "StdCall" o bien "CDecl", el resto pueden presentar
>> problemas serios de compatibilidad. Si la librería es para Windows
>> "StdCall" es la que usa el API de Windows, si la librería es para
>> Linux lo habitual es usar "CDecl" (convención de "C").
GLP> CDecl quizás sea lo más adecuado.

Si lo vas a usar en 2 o más plataformas mejor que todo sea CDecl.

GLP> Sí, buscando dí con un tutorial de Delphi, y después lo añadí, y me dí
GLP> cuenta que mi aplicación se caía al llamar a la DLL, me hice un pequeño
GLP> proyectillo[1] para comprobar el funcionamiento de la librería, pero la
GLP> aplicación se queda colgada, quizás es por lo que comentas de la LCL.

Si, te falla por que no inicializas la LCL al hacerlo en una librería.
Te pongo un poco lo que te falta, pero puede no ser exactamente así,
ya que no he hecho pruebas de librería con LCL:

1) Te falta inicializar la LCL, o sea, crear un objeto TApplication,
si no no hay cola de mensajes ni nada de nada, vamos por lo menos te
falta "Application.Initialize;" antes de llamar a nada que use la LCL.

2) Es posible que antes de abrir un form cualquiera tengas que
ejecutar un "Application.Run;" de modo que las colas de mensajes
existan, pero como he dicho esto podría funcionar en Windows, pero lo
dudo en GTK, QT, etc...

Está claro que hay que pegarle un vistazo a la LCL a ver si se da
construido una librería que muestre forms, etc, aunque fallen algunas
cosas más avanzadas.

Por cierto, creo que la directiva external en la función sobra, ya que
si no me equivoco eso sería para traer esa función de una DLL, no al
revés, pero como te digo hace años que no hago una DLL, la última en
Delphi hace como 3 o 4 años :)

>> Una vez generada la DLL comprueba con un visor de exportaciones si el
>> nombre de la función está disponible en "Exports". Yo uso el viejo
>> TDump, pero supongo que con tu compilador (Visual C parece) vendrá
>> algo más moderno.
GLP> No es VisualC. Es un entorno visual cerrado llamado Velneo.

Si ya me he fijado ahora que no era VC :)

-- 
Best regards,
 José





More information about the Lazarus-es mailing list