Creación de DLL con xHarbour

Creación de DLL con xHarbour

Postby Vikthor » Fri Nov 17, 2006 4: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
Code: Select all  Expand view

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

Code: Select all  Expand view
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
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Re: Creación de DLL con xHarbour

Postby Vikthor » Tue Nov 21, 2006 3: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
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Wed Nov 22, 2006 8:01 am

Vikthor,

Cómo estas llamando a las funciones de la DLL ?
regards, saludos

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

Postby Vikthor » Wed Nov 22, 2006 2:26 pm

Antonio Linares wrote:Vikthor,

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

Code: Select all  Expand view
// 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
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Wed Nov 22, 2006 5:43 pm

Vikthor,

Haz un impdef de la DLL y asegúrate de que HBDLLENTRY() está exportada.
regards, saludos

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

Postby Vikthor » Wed Nov 22, 2006 5: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
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Wed Nov 22, 2006 6: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41940
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Vikthor » Thu Nov 23, 2006 1: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
Code: Select all  Expand view
LIBRARY     TUTOR01.DLL

EXPORTS
    _WndFrameProc                  @1   ; _WndFrameProc
    __DbgWndProc                   @3   ; __DbgWndProc
    __WndProc                      @2   ; __WndProc
    ___CPPdebugHook                @4   ; ___CPPdebugHook
Vikthor
User avatar
Vikthor
 
Posts: 271
Joined: Fri Oct 07, 2005 5:20 am
Location: México

Postby Antonio Linares » Thu Nov 23, 2006 7: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:
Code: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41940
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 78 guests