Xailer para Harbour (II)

Ya está listo también el soporte para crear DLLs con Harbour, y de la misma forma que estamos acostumbrados, no como obliga a hacer Harbour.

Hasta ahora, las DLLs que hacíamos con Xailer y xHarbour se apoyaban en la VM y RTL que se enlaza en el mismo ejecutable, de forma que la DLL es muy pequeña (no contiene ni VM ni RTL), y se integran perfectamente con nuestros programas. Un buen ejemplo de ello son los plugins del IDE y XEdit y los componentes de terceros que se integran en el IDE.

Por desgracia, Harbour no permite hacerlo así. En Harbour sólo están soportadas dos tipos de DLLs de PCode: con toda la VM y RTL dentro de las mismas, o apoyándose en Harbour.dll de forma externa.

En el primer caso, la DLL será grande, por incluir todas las librerías de Harbour dentro, además de los problemas inherentes al hecho de que se está ejecutando en una segunda VM, en un contexto distinto del propio ejecutable. Este tipo de DLLs están, en realidad, destinadas a crear código que va a ser ejecutado por programas hechos con otros lenguajes o herramientas de programación. De ahí la necesidad de incluir todo lo necesario para ejecutar su código dentro de ellas mismas.

En el segundo caso, aunque está destinado a crear DLLs de PCode que van a ser ejecutadas por un programa Harbour, tiene el inconveniente de que tenemos que distribuir Harbour.dll, que generalmente es mucho más grande de lo que realmente necesitamos (hay que tener en cuenta que todo Harbour está metido dentro de esa DLL, se use o no), además de tener que compilar también nuestro ejecutable apoyándose en Harbour.dll (de lo contrario estaríamos usando dos VM al mismo tiempo como en el caso anterior). En nuestro caso es todavía peor, porque tendríamos que crear un Xailer.dll con todo Xailer dentro para que esté disponible para la DLL, y distribuirlo también con nuestros programas.

Y bueno, para ser sincero, Harbour también permite DLLs de PCode que se apoyan en la VM del ejecutable, pero sólo si la DLL contiene exclusivamente PCode, y haciendo algunas triquiñuelas. En el momento en que la DLL contiene código C que utiliza alguna función del API del Harbour, se acabó. Y esto es casi siempre, porque ¿qué rutina en C no necesita recibir parámetros desde PRG o devolver valores, usando hb_par*() y/o hb_ret*()? Así que esta opción no nos vale, porque en la práctica ofrece exactamente lo mismo, y con las mismas limitaciones, que los .hrb. P.ej., no serviría para crear controles o componentes de terceros para el IDE, ya que habitualmente contienen algo (o mucho) de código C.

Afortunadamente, en Xailer hemos conseguido lo que realmente necesitamos: DLLs pequeñas, apoyándose en la VM y RTL que están en el ejecutable. Vamos, lo que ya teníamos funcionando con xHarbour desde hace años. Y exactamente con la misma facilidad: basta con seleccionar la opción «DLL» en las propiedades del proyecto y compilar.

Crear una DLL en Xailer

Crear una DLL en Xailer

Ahora, el siguiente paso es migrar también el debugger, aparte claro está, de seguir depurando y corrigiendo todos los fallos que encontremos. Como podéis ver, ya queda poco para tenerlo todo 😉

1 comentario en “Xailer para Harbour (II)

  1. Bingen

    Felicidades por él resultado, ya veo que él cambio os está dando guerra y agradecemos él esfuerzo que conlleva. Esperamos ansiosos él momento de empezar a probarlo.
    Saludos

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *