DLL - ¿Cómo generar la librería para uso de DLLs?
Previous topic  First topic  Next topic


La librería DLL.lib (para el compilador BCC32 y Pelles C) o LibDLL.a (para el compilador MinGw) sirve para poder usar dll's con los programas [x]Harbour MiniGui.

A continuación se proveen los fuentes para crear estas dos librerías: Dll.zip

Recomendaciones:


  • Para Minigui Oficial 1.x
  • .

    En este caso hay que compilar dos fuentes escritos en C llamados _WinDll.c y _WinCall.c

    Cuando BCC32 compila estos fuentes requiere del utilitario TAsm32.exe, el cual
    no viene con el compilador free y debe residir en el directorio \Bin del compilador BCC32. Si no lo tenés lo podés bajar desde acá: TAsm32.zip

    Una vez que tengamos los dos fuentes y el TAsm32.exe, solo tenemos que crear un proyecto con QPM de tipo LIB y utilizar las opciones de Rename para llamar DLL.lib (o simplemente DLL ya que QPM completará la extension correspondiente) al modulo resultante y la opcion Copy/Move para mover la libreria al directorio \Lib del Harbour o xHarbour que hayamos elegido para compilar.


  • Para el resto de las miniguis
  • .

    En este caso hay que compilar dos fuentes, uno escrito en C llamado cDll.c y otro escrito en [x]Harbour llamado hDll.prg

    Una vez que tengamos los dos fuentes, solo tenemos que crear un proyecto con QPM de tipo LIB y utilizar las opciones de Rename para llamar DLL (QPM completará la extension correspondiente) al modulo resultante y la opcion Copy/Move para mover la libreria al directorio \Lib del Harbour o xHarbour que hayamos elegido para compilar.


    Cabe aclarar que estos fuentes no son los originales que se utilizaban para esta funcionalidad, estos fuentes no requieren del tipo de dato pasado como parametro en cada funcion. Se sigue manteniendo dicho formalismo para que los programas viejos sigan funcionando sin necesidad de eliminar ese dato redundante.
    Otra forma de utilizar esta libreria es llamar directamente a la funcion CallDll32 en lugar de usar DECLARE.
    La sintaxis de esta funcion es:


    CallDLL32( <(FuncName)> , <(DllName)> [, <uParam1> ] [, <uParamN> ] )

    Por ejemplo, para invocar a la función sndPlaySoundA de la Dll WinMM.dll para hacer play de un archivo wav podemos usar este formato:

    Declarando previamente la funcion:

    DECLARE DLL_TYPE_BOOL sndPlaySoundA ( DLL_TYPE_LPCSTR lpszSound , DLL_TYPE_UINT fuSound ) IN WINMM.DLL

    (donde DLL_TYPE_BOOL significa que la funcion retorna TRUE o FALSE, DLL_TYPE_LPCSTR indica que el primer parámetro es estring y DLL_TYPE_UINT indica que el segundo parametro es un entero sin signo)

    y luego utilizandola:

    sndPlaySoundA ( "sample.wav" , 0 )

    en cambio, con estos fuentes, además del formato anterior, podemos llamar directamente a la funcion CallDll32 olvidandonos de especificar el tipo de parámetros que le pasamos a la función:

    CallDLL32( "sndPlaySoundA" , "WinMM.dll" , "sample.wav" , 0 )


    Nota para todas las minigui excepto Oficial MiniGui 1.x: En el sample que se adjunta, notaran que hay una definicion xcommand dentro del prg que realiza la definicion correspondiente para que funcione esta libreria. En Oficial MiniGui 3.x es redundante ya que ya viene codificada en el fuente I_DLL.h del subdirectorio \include, aunque esta redundancia no genera errores de funcionamiento.


    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