[Lazarus-es] Convenciones de librerías

Giuseppe Luigi Punzi glpunzi en lordzealon.com
Dom Abr 10 22:09:01 CEST 2011


El 10/04/2011 13:18, José Mejuto escribió:
> 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.

Ya investigaré, realmente no necesito que muestre ningún mensaje, pero 
era sólo una prueba.

>>> 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.

Si, es el caso. Velneo trabaja desde Win/Linux/Mac y precisamente, la 
librería quiero que sea igualmente portable.

> 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.

Sobre ésto ya me calentaré la cabeza llegado el momento, ahora mismo la 
verdad es que creo que no lo necesito.

> 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 :)

Donde está el external, es el proyecto que he creado de prueba para 
comprobar si la dll funcionaba.





More information about the Lazarus-es mailing list