FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como creo una dll con mi codigo y como lo uso con otros exes
Posts: 225
Joined: Tue Feb 28, 2006 04:25 PM
Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Sun Mar 29, 2009 05:34 PM

Amigso tengo un funcion por ejemplo

Func sumar( a , b )
retu(a+b)

Como hago para pasar esa funcion a un dll

y luego como invoco ese dll desde otro ejecutable

sera algo como
DLL function sumar( a , b )

Ahora esto es mas rapido que hacer en un ejecutable y pasarle
parametros con .

Gracias por la ayuda

la necesida de crear una dll

ME INTERESA FW Y XHB POR SER OPEN SOURCE
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Sun Mar 29, 2009 09:57 PM

Vladimir,

Puedes crear dos tipos de DLL:

1: Solo contiene pcode y usa la "maquina virtual" de Harbour contenida en el EXE.

2: Es una DLL autocontenida que puede usarse desde cualquier EXE, escrito en cualquier lenguaje.

Cual de esas dos opciones te interesa ?

Existe una tercera opcion que es usar un EXE que solo contiene pcode y usa la "maquina virtual" que esta dentro de una DLL. Son EXEs muy pequenos, ya que solo contienen pcode.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 225
Joined: Tue Feb 28, 2006 04:25 PM
Re: Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Mon Mar 30, 2009 01:59 AM

Gracias por contestar

Esta seria la opcion que me interesa.

2: Es una DLL autocontenida que puede usarse desde cualquier EXE, escrito en cualquier lenguaje.

Muchas Gracias

ME INTERESA FW Y XHB POR SER OPEN SOURCE
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Mon Mar 30, 2009 10:47 AM

Vladimir,

La opción 2 la hemos comentado recientemente a fondo en:

viewtopic.php?f=3t=14863

Revisa FWH\samples\babu.prg y babudll.prg

&

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 30
Joined: Sun Apr 24, 2011 12:50 AM
Re: Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Wed Jan 28, 2015 11:49 PM

Buenas Antonio y resto

Disculpen responder a un tema tan viejo pero estoy buscando información sobre el punto 1 y no la localizo:

1: Solo contiene pcode y usa la "maquina virtual" de Harbour contenida en el EXE.

Encontre el tema: viewtopic.php?f=6&t=15374&start=15 pero guao al parecer hay que programar practicamente en C y no es lo que busco.

Mi idea es tener funciones en DLL que van a ejecutarse unicamete con mi EXE. Esas funciones deben poder llamar otras funciones que estan en el EXE, o sea, que el codigo de la DLL se comporte como si fuese parte del mismo EXE

Gracias de antemano por su tiempo.

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Como creo una dll con mi codigo y como lo uso con otros exes
Posted: Thu Jan 29, 2015 04:20 AM
hidroxid.
Todo esto lo tome de samples hace algunos meses y estuve jugando un poco. Espero te sea de alguna utilidad.

Code (fw): Select all Collapse
// Build a DLL from this code using: buildhd.bat mydll
// Please review TESTMYDL.prg to see how to use this DLL.

//----------------------------------------------------------------------------//
function Main()

   MsgInfo( "Inside DLL main()" )
   
return nil

//----------------------------------------------------------------------------//
function OneParam( x )

   MsgInfo( x )
   
return nil   

//----------------------------------------------------------------------------//
function OtraMas( x )
local cTxt := x+"  (un texto recibido mas uno agregado)"

   MsgStop( cTxt )
   
return nil   

//----------------------------------------------------------------------------//

#pragma BEGINDUMP 

#include <windows.h>
#include <hbapi.h> 
#include <hbapiitm.h> 

__declspec( dllexport ) LONG pascal DOPROC( char * cProcName, char * cParam ) 
{ 
   PHB_ITEM pItem = hb_itemPutC( NULL, cParam ); 

   if( cProcName )
   {
      hb_itemDoC( cProcName, 1, ( PHB_ITEM ) pItem, 0 ); 
      hb_itemRelease( pItem ); 
   }
   else   
      MessageBox( 0, "inside the DLL", "DOPROC", 0 );

   return 0; 
} 

#pragma ENDDUMP



Code (fw): Select all Collapse
// Calling a Harbour DLL
// Please review samples\MyDLL.prg and build it before

#include "FiveWin.ch" 

function Main() 

   local cString := "Hola a todo el mundo!"
   local c1 := "Primer texto"

   DOPROC( "ONEPARAM", cString )

   DOPROC( "OTRAMAS", c1 )

   MsgInfo( "Todo correcto, hasta el momento." ) 
   
return nil 

DLL FUNCTION DOPROC( cProc AS LPSTR, cText AS LPSTR ) AS LONG PASCAL LIB "MYDLL.dll"




Code (fw): Select all Collapse
@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for xHarbour 12.04 - Apr. 2012          xHarbour development power ³Ü
ECHO ³ (c) FiveTech, 1993-2012     for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST

ECHO Compiling...

if "%FWDIR%" == "" set FWDIR=C:\FWH1204\
if "%XHDIR%" == "" set XHDIR=c:\xharbour_BCC582_20120330
rem if "%2" == "/b" set GT=gtwin
rem if not "%2" == "/b" set GT=gtgui
set GT=gtgui

set hdir=%XHDIR%
set hdirl=%hdir%\lib
set bcdir=c:\bcc582
set fwh=%FWDIR%

%hdir%\bin\harbour %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log
IF ERRORLEVEL 1 GOTO COMPILEERRORS
@type comp.log

echo -O2 -e%1.exe -I%hdir%\include -I%bcdir%\include %1.c > b32.bc
%bcdir%\bin\bcc32 -M -c -v @b32.bc
:ENDCOMPILE

IF EXIST %1.rc %bcdir%\bin\brc32 -r -I%bcdir%\include %1

echo %bcdir%\lib\c0w32.obj + > b32.bc
echo %1.obj, + >> b32.bc
echo %1.exe, + >> b32.bc
echo %1.map, + >> b32.bc
echo %fwh%\lib\Fivehx.lib %fwh%\lib\FiveHC.lib + >> b32.bc
echo %hdirl%\rtl.lib + >> b32.bc
echo %hdirl%\vm.lib + >> b32.bc
echo %hdirl%\%GT%.lib + >> b32.bc
echo %hdirl%\lang.lib + >> b32.bc
echo %hdirl%\macro.lib + >> b32.bc
echo %hdirl%\rdd.lib + >> b32.bc
echo %hdirl%\dbfntx.lib + >> b32.bc
echo %hdirl%\dbfcdx.lib + >> b32.bc
echo %hdirl%\dbffpt.lib + >> b32.bc
echo %hdirl%\hbsix.lib + >> b32.bc
echo %hdirl%\debug.lib + >> b32.bc
echo %hdirl%\common.lib + >> b32.bc
echo %hdirl%\pp.lib + >> b32.bc
echo %hdirl%\pcrepos.lib + >> b32.bc
echo %hdirl%\ct.lib + >> b32.bc
echo %hdirl%\zlib.lib + >> b32.bc
echo %hdirl%\hbzip.lib + >> b32.bc
echo %hdirl%\png.lib + >> b32.bc

rem Uncomment these two lines to use Advantage RDD
rem echo %hdir%\lib\rddads.lib + >> b32.bc
rem echo %hdir%\lib\Ace32.lib + >> b32.bc

echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\uuid.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\gdiplus.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib, >> b32.bc

IF EXIST %1.res echo %1.res >> b32.bc

rem uncomment this line to use the debugger and comment the following one
if %GT% == gtwin %bcdir%\bin\ilink32 -Gn -Tpe -s -v @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
if %GT% == gtgui %bcdir%\bin\ilink32 -Gn -aa -Tpe -s -v @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * Application successfully built *
%1
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c

:COMPILEERRORS
@type comp.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Linking errors *
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Build [Program]     {-- No especifiques la extensi¢n PRG
ECHO                                {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT

PAUSE



Code (fw): Select all Collapse
@ECHO OFF
CLS
ECHO ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
ECHO ³ FiveWin for xHarbour 11.09 - Sep. 2012          xHarbour development power ³Ü
ECHO ³ (c) FiveTech, 1993-2012     for Microsoft Windows 9X/NT/200X/ME/XP/Vista/7 ³Û
ECHO ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙÛ
ECHO ÿ ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß

if A%1 == A GOTO :SINTAX
if NOT EXIST %1.prg GOTO :NOEXIST

ECHO Building self contained DLL
ECHO Compiling...

if "%FWDIR%" == "" set FWDIR=c:\fwh1204\
if "%XHDIR%" == "" set XHDIR=c:\xharbour_bcc582_20120330
rem if "%2" == "/b" set GT=gtwin
rem if not "%2" == "/b" set GT=gtgui
set GT=gtgui

set hdir=%XHDIR%
set hdirl=%hdir%\lib
set bcdir=c:\bcc582
set fwh=%FWDIR%

%hdir%\bin\harbour %1 /n /i%fwh%\include;%hdir%\include /w /p %2 %3 > comp.log
IF ERRORLEVEL 1 GOTO COMPILEERRORS
@type comp.log

echo -O2 -e%1.exe -I%hdir%\include -I%bcdir%\include %1.c > b32.bc
%bcdir%\bin\bcc32 -M -c -v @b32.bc
:ENDCOMPILE

IF EXIST %1.rc %bcdir%\bin\brc32 -r -I%bcdir%\include %1

echo %bcdir%\lib\c0d32.obj + > b32.bc
echo %1.obj, + >> b32.bc
echo %1.dll, + >> b32.bc
echo %1.map, + >> b32.bc
echo %fwh%\lib\Fivehx.lib %fwh%\lib\FiveHC.lib + >> b32.bc
echo %hdirl%\rtl.lib + >> b32.bc
echo %hdirl%\vm.lib + >> b32.bc
echo %hdirl%\%GT%.lib + >> b32.bc
echo %hdirl%\lang.lib + >> b32.bc
echo %hdirl%\macro.lib + >> b32.bc
echo %hdirl%\rdd.lib + >> b32.bc
echo %hdirl%\dbfntx.lib + >> b32.bc
echo %hdirl%\dbfcdx.lib + >> b32.bc
echo %hdirl%\dbffpt.lib + >> b32.bc
echo %hdirl%\hbsix.lib + >> b32.bc
echo %hdirl%\debug.lib + >> b32.bc
echo %hdirl%\common.lib + >> b32.bc
echo %hdirl%\pp.lib + >> b32.bc
echo %hdirl%\pcrepos.lib + >> b32.bc
echo %hdirl%\ct.lib + >> b32.bc
echo %hdirl%\zlib.lib + >> b32.bc
echo %hdirl%\hbzip.lib + >> b32.bc

rem Uncomment these two lines to use Advantage RDD
rem echo %hdir%\lib\rddads.lib + >> b32.bc
rem echo %hdir%\lib\Ace32.lib + >> b32.bc

echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\uuid.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib + >> b32.bc
echo %bcdir%\lib\psdk\rasapi32.lib + >> b32.bc
echo %bcdir%\lib\psdk\nddeapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\msimg32.lib + >> b32.bc
echo %bcdir%\lib\psdk\psapi.lib + >> b32.bc
echo %bcdir%\lib\psdk\gdiplus.lib + >> b32.bc
echo %bcdir%\lib\psdk\iphlpapi.lib, >> b32.bc

IF EXIST %1.res echo %1.res >> b32.bc

if %GT% == gtgui %bcdir%\bin\ilink32 -Gn -Tpd -s -v @b32.bc
IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * DLL successfully built *
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c

:COMPILEERRORS
@type comp.log
ECHO * Compile errors *
GOTO EXIT

:LINKERROR
ECHO * Linking errors *
GOTO EXIT

:SINTAX
ECHO    SYNTAX: Build [Program]     {-- No especifiques la extensi¢n PRG
ECHO                                {-- Don't specify .PRG extension
GOTO EXIT

:NOEXIST
ECHO The specified PRG %1 does not exist

:EXIT

PAUSE
Francisco J. Alegría P.

Chinandega, Nicaragua.



Fwxh-MySql-TMySql

Continue the discussion