Crear DLL con funciones PRG con Xharbour

Re: Crear DLL con funciones PRG con Xharbour

Postby csincuir » Wed Jul 27, 2011 9:38 am

Hola a todos.
Preguntadoles si alguno a podido crear una DLL auto-contenida (el caso 2), que indica Antonio? Si me puede indicar como se hace por favor.
No he podido encontrar la forma de crear una DLL para que otro .exe creado con otro lenguaje la pueda utilizar.
(Aunque también me interesa el caso 1)

Saludos.

Carlos Sincuir
csincuir
 
Posts: 396
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Crear DLL con funciones PRG con Xharbour

Postby Antonio Linares » Mon Aug 01, 2011 8:20 pm

Basicamente lo que se hace es inicializar la máquina virtual de Harbour desde el punto de entrada de la DLL. Es lo que hemos hecho por ejemplo para usar Harbour en iOS (iPhone/iPad) y en Android (FivePhone):

Code: Select all  Expand view
hb_vmInit( TRUE );

Una vez la máquina virtual de Harbour está inicalizada, se trata de acceder a una función exportada que prepare la pila de Harbour de forma correcta y ejecute la función de Harbour solicitada. Hay ejemplos de ese código aqui:

viewtopic.php?p=66195#p66195

En concreto:
Code: Select all  Expand view
#pragma BEGINDUMP

#include <hbapi.h>
#include <hbvm.h>

   ...
   // We build the virtual machine stack frame

   hb_vmPushSymbol( hb_dynsymGetSymbol( "SAY" ) ); // we push the symbol of the method
   hb_vmPush( hb_param( 1, HB_IT_OBJECT ) ); // we push the object or just NIL for a function/procedure call
   hb_vmPushString( "Calling a method from low level", strlen( "Calling a method from low level" ) );
   hb_vmFunction( 1 ); // 1 --> number of supplied parameters
   
   // the returned value can be accessed using hb_stackReturnItem() --> PHB_ITEM
   // or simply calling hb_par...( -1 );
}

#pragma ENDDUMP


Ese código debe ser exportado para que pueda accederse desde aplicaciones que usen la DLL. Harbour proporciona un define para que exportar una función en lenguaje C: HB_EXPORT.

El primer paso para practicar esto es aprender a construir una DLL simple en puro lenguaje C y probar a acceder a ella, por ejemplo desde el mismo Harbour. FiveWin proporciona un ejemplo sencillo en FWH\dlls\screen32.c y rc2dll32.bat. Para implementar alguna función tenemos más ejemplos en:
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41315
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Crear DLL con funciones PRG con Xharbour

Postby csincuir » Mon Aug 01, 2011 8:48 pm

Gracias Antonio.
Aunque creí que era un poco mas fácil el asunto, pero con esto tengo para leer y empezar hacer las pruebas.

Saludos cordiales.

Carlos Sincuir
csincuir
 
Posts: 396
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Re: Crear DLL con funciones PRG con Xharbour

Postby csincuir » Mon Aug 01, 2011 8:54 pm

Antonio, solo una pregunta mas.
En donde puedo después encontrar mas ejemplos, que se te corto el mensaje y no se ve en donde mas puedo buscar.

Gracias,

Carlos Sincuir
csincuir
 
Posts: 396
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 85 guests