FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Creaci贸n de DLL con xHarbour
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Creaci贸n de DLL con xHarbour
Posted: Fri Nov 17, 2006 04:41 AM
Hola a todos :

Estoy intentando crear un archivo dll desde un Prg, m谩s sin embargo aunque la creaci贸n del archivo dll s铆 se realiza, cuando hago el llamado a alguna funci贸n desde otro PRG, simplemente no se ejecuta.

Los archivos que estoy usando de prueba son tutor01.prg y testdll.prg
Compiling...
xHarbour Compiler build 0.99.61 (SimpLex)
Copyright 1999-2006, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'tutor01.prg' and generating preprocessed output to 'tutor01.ppo'...
Lines 26, Functions/Procedures 3
Generating C source output to 'tutor01.c'...
Done.
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
tutor01.c:
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
* self contained DLL successfully built


Aqu铆 me indica que la creaci贸n de la dll fue correcta.


Esta es la configuraci贸n del archivo buildhd.bat que estoy usando para crear la DLL

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

ECHO Compiling...

set hdir=c:\xharbour
set bcdir=c:\bcc55

%hdir%\bin\harbour %1 /n /i..\include;%hdir%\include /w /p %2 %3 > clip.log
@type clip.log
IF ERRORLEVEL 1 PAUSE
IF ERRORLEVEL 1 GOTO EXIT

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

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

echo c0d32.obj + > b32.bc
echo %1.obj, + >> b32.bc
echo %1.dll, + >> b32.bc
echo %1.map, + >> b32.bc
echo ..\lib\FiveHx.lib ..\lib\FiveHC.lib + >> b32.bc
echo %hdir%\lib\rtl.lib + >> b32.bc
echo %hdir%\lib\vm.lib + >> b32.bc
rem echo %hdir%\lib\gtwin.lib + >> b32.bc
echo %hdir%\lib\gtgui.lib + >> b32.bc
echo %hdir%\lib\lang.lib + >> b32.bc
echo %hdir%\lib\macro.lib + >> b32.bc
echo %hdir%\lib\rdd.lib + >> b32.bc
echo %hdir%\lib\dbfntx.lib + >> b32.bc
echo %hdir%\lib\dbfcdx.lib + >> b32.bc
echo %hdir%\lib\dbffpt.lib + >> b32.bc
echo %hdir%\lib\hbsix.lib + >> b32.bc
echo %hdir%\lib\debug.lib + >> b32.bc
echo %hdir%\lib\common.lib + >> b32.bc
echo %hdir%\lib\pp.lib + >> b32.bc
rem echo %hdir%\lib\codepage.lib + >> b32.bc

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

echo %bcdir%\lib\import32.lib + >> b32.bc
echo %bcdir%\lib\cw32.lib + >> b32.bc
echo %bcdir%\lib\psdk\odbc32.lib, >> b32.bc
IF EXIST %1.res echo %1.res >> b32.bc
%bcdir%\bin\ilink32 -Tpd -aa @b32.bc

IF ERRORLEVEL 1 GOTO LINKERROR
ECHO * self contained DLL successfully built
GOTO EXIT
ECHO

rem delete temporary files
@del %1.c
@del %1.il?

:LINKERROR
ECHO * There are 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


Estoy usando xHarbour.

Alguna sugerencia de que estoy mal.
Vikthor
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Re: Creaci贸n de DLL con xHarbour
Posted: Tue Nov 21, 2006 03:03 PM
Vikthor wrote:Hola a todos :

Estoy intentando crear un archivo dll desde un Prg, m谩s sin embargo aunque la creaci贸n del archivo dll s铆 se realiza, cuando hago el llamado a alguna funci贸n desde otro PRG, simplemente no se ejecuta......................................


Antonio alguna sugerencia ?
Vikthor
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Creaci贸n de DLL con xHarbour
Posted: Wed Nov 22, 2006 08:01 AM

Vikthor,

C贸mo estas llamando a las funciones de la DLL ?

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Creaci贸n de DLL con xHarbour
Posted: Wed Nov 22, 2006 02:26 PM
Antonio Linares wrote:Vikthor,

C贸mo estas llamando a las funciones de la DLL ?

// Using Harbour DLLs
// To build Tutor01.dll do: buildhd.bat tutor01

#include "FiveWin.ch"

function Main()

   HbDLLEntry( "MAIN" )
   MsgInfo( "ok from EXE" )

return nil

DLL FUNCTION HBDLLENTRY( cProc AS LPSTR ) AS LONG PASCAL LIB "Tutor01.dll"
Vikthor
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Creaci贸n de DLL con xHarbour
Posted: Wed Nov 22, 2006 05:43 PM

Vikthor,

Haz un impdef de la DLL y aseg煤rate de que HBDLLENTRY() est谩 exportada.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Creaci贸n de DLL con xHarbour
Posted: Wed Nov 22, 2006 05:50 PM
Antonio Linares wrote:Vikthor,

Haz un impdef de la DLL y aseg煤rate de que HBDLLENTRY() est谩 exportada.


Ahora si navego con bandera de ignorante, 驴 me podr铆as explicar que significa lo que estas sugiriendo ?
Vikthor
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Creaci贸n de DLL con xHarbour
Posted: Wed Nov 22, 2006 06:01 PM

Vikthor,

impdef.exe tutor01.def tutor01.dll

Mira dentro de tutor01.def (es un fichero ascii) a ver si est谩 HBDLLENTRY.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 298
Joined: Fri Oct 07, 2005 05:20 AM
Creaci贸n de DLL con xHarbour
Posted: Thu Nov 23, 2006 01:14 AM
Antonio Linares wrote:Vikthor,

impdef.exe tutor01.def tutor01.dll

Mira dentro de tutor01.def (es un fichero ascii) a ver si est谩 HBDLLENTRY.


Antonio :

Hice lo que me sugeriste y no esta contenida HBDLLENTRY. dentro de tutor01.dll
LIBRARY     TUTOR01.DLL

EXPORTS
    _WndFrameProc                  @1   ; _WndFrameProc
    __DbgWndProc                   @3   ; __DbgWndProc
    __WndProc                      @2   ; __WndProc
    ___CPPdebugHook                @4   ; ___CPPdebugHook
Vikthor
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Creaci贸n de DLL con xHarbour
Posted: Thu Nov 23, 2006 07:50 AM
Vikthor,

Ese es el problema, por eso no te funciona, porque no est谩 exportada la funci贸n HBDLLENTRY.

Est谩s usando xHarbour ? Revisa xharbour\source\vm\maindll.c y comprueba que tienes esto:
LONG HB_EXPORT PASCAL HBDLLENTRY( char * cProcName )
{
   hb_itemDoC( cProcName, 0, 0 );

   return 0;
}

Observa que usa HB_EXPORT por lo que finalmente deber铆a aparecer en el fichero DEF. Mientras no aparezca, no te funcionar谩.
regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion