0% found this document useful (0 votes)
261 views

DLL With Harbour

Harbour supports creating Windows DLLs containing Harbour code in three ways: 1) Self-contained DLLs containing functions from any platform, 2) PCode EXEs using a Harbour.dll containing common code, and 3) PCode DLLs used from traditional Harbour EXEs containing replaceable modules. The maindll.c, maindllh.c and maindllp.c entry points support different DLL types for various needs, such as creating a Harbour.dll or small pcode DLLs.

Uploaded by

Fabian Toro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
261 views

DLL With Harbour

Harbour supports creating Windows DLLs containing Harbour code in three ways: 1) Self-contained DLLs containing functions from any platform, 2) PCode EXEs using a Harbour.dll containing common code, and 3) PCode DLLs used from traditional Harbour EXEs containing replaceable modules. The maindll.c, maindllh.c and maindllp.c entry points support different DLL types for various needs, such as creating a Harbour.dll or small pcode DLLs.

Uploaded by

Fabian Toro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 4

http://cch4clipper.blogspot.com/2013/09/windows-dlls-with-harbour-code.

html

Saturday, September 28, 2013

Windows DLLs with Harbour code


There are a lot of infomation that can be gleaned if one chose to go through the \doc folder
of any official harbour installation. In this post, I have chosen to re-publish the following:-

Windows DLLs with Harbour code

Programs created with Clipper or Harbour are traditionally a


monolithic EXE containing all executable code.  This includes
the Virtual Machine (VM) and the RunTime Library (RTL) as well as
your own code.  Running under Windows with Harbour, you
can now also create and use Windows DLLs that contain PRG code.

Harbour supports Windows DLLs in 3 ways.

  1) Self-contained DLLs containing functions from any platform.


     (These are not what we call a "harbour.dll", although they may
     be named that. The DLL entry points are different.)
     These have the VM/RTL inside them and can be used by any other
     Windows program. You can create a .lib for static linking,
     or use GetProcAddress as in any standard Windows DLL.
     Calling Harbour/Prg functions directly is limited to
     those that take no parameters unless you include C functions
     in the DLL that take parameters and then call the PRG-level
     code.

     To do static linking, do this to create the .lib:


        implib harbour.lib harbour.dll
     For the Borland C platform, use that library and import32.lib
     and cw32.lib from Borland, and you are ready to go.

  2) PCode EXEs using a Harbour.dll

     A Harbour.dll is designed to be called from a Harbour app.


     A pcode EXE is a small Harbour executable that does not contain the
     VM/RTL. To execute its functions, it must load and access a
     Harbour.dll.
     If you want dynamic linking, then use this to execute a Harbour
     dynamically loaded pcode DLL function or procedure:
        HB_DllDo( [,] ) --> []

     This lets you have all your common code in a DLL, and have lots
     of small EXEs that use it.  Realize however that, even though this
     may be a nice way to manage your code, each EXE may
     load its own image of the Harbour.dll into memory at runtime.
     In terms of Windows memory, there may not be a benefit to using pcode
     EXEs over monolithic EXEs. But it may be a worthwhile maintenance
     benefit to have lots of replaceable small exes.

  3) PCode DLLs used from traditional EXEs


     A pcode DLL does not contain the VM/RTL.
     It is a library of Harbour-compiled PRG code that uses the VM/RTL
     of the EXE that calls it.  This has the benefit of having
     replaceable modules in DLLs that don't necessarily require updating
     your EXE.

The following is clipped from a msg by Antonio Linares to the Harbour


developer list explaining some of the details:

Please notice that there are three different Windows DLL entry points:
   + src/vm/
   * maindll.c     Windows self-contained DLL entry point
   * maindllh.c    Windows Harbour DLL entry point  (harbour.dll)
   * maindllp.c    Windows pcode DLL entry point and VM/RTL routing functions

   >    * maindll.c     Windows self-contained DLL entry point


   To produce Harbour code, as DLLs, that may be used
   from other programming languages applications (as VB,
   Delphi, C++, etc...)

   >    * maindllh.c    Windows Harbour DLL entry point  (harbour.dll)


   To produce Harbour.dll, to be just used from small pcode Harbour EXEs

   >    * maindllp.c    Windows pcode DLL entry point and VM/RTL routing
   To produce small pcode DLLs, to be used just from Harbour EXE apps.
   maindllp.c is the entry point for the Harbour pcode DLLs. pcode DLLs
   are quite small DLLs, that just contain pcode and/or C (using extend
   api) functions.

   mainwin.c is the entry point for Windows EXEs, not for DLLs.

   You may use maindll.c, maindllh.c or maindllp.c based on


   your needs.

   If you are looking to build a Harbour.dll, then you must use
   maindll
DLL de Windows con código Harbour
Hay mucha información que se puede obtener si uno elige ir a la carpeta \ doc de cualquier
instalación de puerto oficial. En esta publicación, he optado por volver a publicar lo
siguiente: -

DLL de Windows con código Harbour Los

programas creados con Clipper o Harbour son tradicionalmente un


EXE monolítico que contiene todo el código ejecutable. Esto incluye
la máquina virtual (VM) y la biblioteca RunTime (RTL), así como
su propio código. Si se ejecuta en Windows con Harbour,
ahora también puede crear y usar archivos DLL de Windows que contengan código PRG.

Harbour admite archivos DLL de Windows de 3 formas.

  1) DLL autónomos que contienen funciones de cualquier plataforma.


     (Estos no son lo que llamamos "harbour.dll", aunque pueden
     ser llamado así. Los puntos de entrada de la DLL son diferentes).
     Estos tienen la VM / RTL dentro de ellos y pueden ser utilizados por cualquier otro
     programa de Windows. Puede crear un .lib para enlaces estáticos
     o utilizar GetProcAddress como en cualquier DLL estándar de Windows.
     Llamar directamente a las funciones Harbour / Prg se limita a
     aquellas que no toman parámetros a menos que incluya funciones C
     en la DLL que toman parámetros y luego llaman al
     código de nivel PRG .

     Para hacer un enlace estático, haga esto para crear el .lib:


        implib harbour.lib harbour.dll
     Para la plataforma Borland C, use esa biblioteca e import32.lib
     y cw32.lib de Borland, y estará listo para comenzar.

  2) PCode EXEs usando un Harbour.dll

     Un Harbour.dll está diseñado para ser llamado desde una aplicación Harbour.
     Un pcode EXE es un pequeño ejecutable de Harbour que no contiene
     VM / RTL. Para ejecutar sus funciones, debe cargar y acceder a un
     Harbour.dll.
     Si desea un enlace dinámico, utilícelo para ejecutar una
     función o procedimiento DLL de código pcode cargado dinámicamente:
        HB_DllDo ( [,]) -> []

     Esto le permite tener todo su código común en una DLL y tener muchos
     EXE pequeños que lo usan. Sin embargo,
     tenga en cuenta que, aunque esta puede ser una buena forma de administrar su código,
cada EXE puede
     cargar su propia imagen de Harbour.dll en la memoria en tiempo de ejecución.
     En términos de memoria de Windows, es posible que no exista ningún beneficio al usar
pcode
     EXE sobre EXE monolíticos. Pero puede ser un
     beneficio de mantenimiento valioso tener muchos ex pequeños reemplazables.

  3) DLL de PCode utilizados desde EXE tradicionales


     Una DLL de pcode no contiene VM / RTL.
     Es una biblioteca de código PRG compilado por Harbour que usa la VM / RTL
     del EXE que lo llama. Esto tiene el beneficio de tener
     módulos reemplazables en archivos DLL que no necesariamente requieren la actualización
de
     su EXE.

Lo siguiente está recortado de un mensaje de Antonio Linares a la


lista de desarrolladores de Harbour que explica algunos de los detalles:

Tenga en cuenta que hay tres puntos de entrada de DLL de Windows diferentes:
   + src / vm /
   * maindll.c Punto de entrada de DLL autónomo de Windows
   * maindllh.c Windows Harbor DLL entry point (harbour.dll)
   * maindllp.c Windows pcode DLL entry point y funciones de enrutamiento VM / RTL

   > * maindll.c Windows autocontenida DLL punto de entrada


   Para producir código Harbour, como DLL, que puede ser utilizado
   desde otras aplicaciones de lenguajes de programación (como VB,
   Delphi, C ++, etc ...)

   > * maindllh.c Punto de entrada de la DLL de Windows Harbour (harbour.dll)


   Para producir Harbour.dll, que se utilizará desde un pequeño pcode Harbour EXEs

   > * maindllp.c Punto de entrada de la DLL de Windows pcode y enrutamiento VM / RTL


   Para producir pequeñas DLL de pcode , para ser utilizado solo desde las aplicaciones
Harbour EXE.
   maindllp.c es el punto de entrada para las DLL de código p de Harbour. Las DLL de pcode
   son DLL bastante pequeñas, que solo contienen funciones de pcode y / o C (usando
extender
   api).

   mainwin.c es el punto de entrada para los EXE de Windows, no para las DLL.

   Puede utilizar maindll.c, maindllh.c o maindllp.c según


   sus necesidades.

   Si está buscando construir un Harbour.dll, debe usar


   maindllh.c

You might also like