¿Cómo crear una Librería de Interfase para acceso a DLLs?
Previous topic  First topic  Next topic


Una librería de interfase es un puente entre nuestro programa y una DLL.

Es decir que mediante esta librería creada a partir de una DLL, puedo usar las funciones de la DLL como si se tratara de una librería estandard, es decir, me despreocupo del tratamiento de la DLL en tiempo de ejecución.

Estas librerías solo tienen punteros a las funciones reales que siguen viviendo en la DLL.

Este proceso NO es una conversion de DLL en Librería.

Para que nuestro programa funcione vamos a seguir necesitando de la DLL en tiempo de ejecución y vamos a requerir la librería de interfase en tiempo de compilación.

El Proceso consiste en extraer los nombres y las características (parámetros, valores retornados, etc) de las funciones contenidas en la DLL para crear la librería de interfase o puente entre nuestro programa y dicha DLL


Para crear estas librerias y usarlas con BCC32 o Pelles C, simplemente se listan las funciones de la DLL y por medio de un utilitario se construye la libreria.
Para crear estas librerias y usarlas con MinGW, hay dos métodos, el primero es igual que para BCC32 y el segundo consiste en extraer la lista de funciones desde otra libreria de interfase pero creada para BCC32 o VC y luego, construir la libreria para MinGW. Es decir, la diferencia esta en armar la lista de funciones desde la propia DLL o desde otra Libreria de Interfase hecha para otra arquitectura de compiladores. Este ultimo método lo denominaremos ReImport. El resultado de ambos métodos pareciera que deberia ser igual pero por algun motivo que desconozco, los nombres de las funciones no son exactamente igual.


Un ejemplo completo del uso de estas Librerias de Interfase lo encontramos en la capa de acceso a MySql que provee [x]Harbour. Ver tópico ¿Cómo construir la interfase para acceder a MySql?. Alli se usa el método Simple para BCC32 y Pelles C y el metodo ReImport para MinGW

En el caso de Librerias para BCC32 y Pelles C, existe además, la posibilidad de agregar en forma incondicional un sufijo '_' (guión bajo) a los nombres de todas las funciones de la libreria resultante. Un caso necesario de uso es para la creación de la libreria de interfase para acceder a las funciones de la DLL de ADS. Tambien lo requiere MySql en el caso de Pelles C

  • Método Simple
  • :

    Para crear una librería de interfase con QPM y el método simple hay que crear un proyecto de tipo Interface Library y seleccionar la minigui con la cual se usará la librería, mediante ese dato, QPM determina si el compilador C es BCC32, Pelles C o MinGW.



    Luego se elige una DLL como entrada y QPM listará automaticamente el contenido de DLL.



    Luego se hace Build del proyecto y se genera la librería de interfase. Si no se especifica Rename del modulo resultante, y tomando como ejemplo de DLL al nombre MyDLL.DLL, la librería resultante tendrá el siguiente formato de nombre:

    MyDLL.LIB para BCC32 y Pelles C
    LibMyDLL.A para MinGW



    El resultado del proceso, es decir, el contenido de la librería de interfase que acabamos de crear se puede ver en Output Error/Module mediante el botón List Output File (or ReList)




  • Método ReImport
  • :

    Para crear una librería de interfase con QPM y el método ReImport (solo se usa con MinGW) hay que crear un proyecto de tipo Interface Library y seleccionar una minigui que utilice MinGW, mediante ese dato, QPM habilitara el tilde para ReImport.



    Luego se elige una DLL como entrada y QPM listará automaticamente el contenido de DLL.



    En este punto, tildamos la opcion de "ReImport from .Lib Library" y localizamos la libreria de Interfase desde donde vamos a extraer la lista de funciones.



    Luego se hace Build del proyecto y se genera la librería de interfase. Si no se especifica Rename del modulo resultante, y tomando como ejemplo de DLL al nombre MyDLL.DLL, la librería resultante tendrá el siguiente formato de nombre:

    MyDLL.LIB para BCC32 y Pelles C
    LibMyDLL.A para MinGW





    El resultado del proceso, es decir, el contenido de la librería de interfase que acabamos de crear se puede ver en Output Error/Module mediante el botón List Output File (or ReList)



    QPM (QAC Based Project Manager) Version 05.05.0016

    Compilación Incremental con las tres versiones de librerías mas populares de la familia MiniGui: HMG, HMG Extended y OOHG.

    Lista de usuarios    Donar vía PayPal    Sitio del proyecto


    Powered by QPM  

    Previous topic  First topic  Next topic