Como creo una dll con mi codigo y como lo uso con otros exes

Post Reply
Vladimir Zorrilla
Posts: 225
Joined: Tue Feb 28, 2006 4:25 pm
Location: PERU

Como creo una dll con mi codigo y como lo uso con otros exes

Post by Vladimir Zorrilla »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Como creo una dll con mi codigo y como lo uso con otros exes

Post by Antonio Linares »

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
Vladimir Zorrilla
Posts: 225
Joined: Tue Feb 28, 2006 4:25 pm
Location: PERU

Re: Como creo una dll con mi codigo y como lo uso con otros exes

Post by Vladimir Zorrilla »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Como creo una dll con mi codigo y como lo uso con otros exes

Post by Antonio Linares »

Vladimir,

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

http://forums.fivetechsupport.com/viewt ... =3&t=14863

Revisa FWH\samples\babu.prg y babudll.prg
regards, saludos

Antonio Linares
www.fivetechsoft.com
hidroxid
Posts: 28
Joined: Sun Apr 24, 2011 12:50 am

Re: Como creo una dll con mi codigo y como lo uso con otros exes

Post by hidroxid »

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: http://fivetechsupport.com/forums/viewt ... 4&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.
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como creo una dll con mi codigo y como lo uso con otros exes

Post by FranciscoA »

hidroxid.
Todo esto lo tome de samples hace algunos meses y estuve jugando un poco. Espero te sea de alguna utilidad.

Code: Select all

// 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: Select all

// 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: Select all

@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: Select all

@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.

Fwxh1204-MySql-TMySql
Post Reply