En todos mis programas uso intensivemente el llamado a funciones contru铆das en DLL麓s.
Si genero tanto la DLL como el PRG principal con FWH 1.10, funciona perfecto, pero, con FWH 12.04 no encuentro forma de que funcione
Aqu铆 pongo c贸digo de ejemplo:
CodeFDll.prg - Programa princial:
#include "FiveWin.ch"
REQUEST DBFCDX, DBUSEAREA, WBROWSE, DBCLOSEALL
STATIC oWnd
Function Inicio()
LOCAL oMenu
LOCAL hDll := hb_LibLoad( "pcodedl2.DLL" )
RddSetDefault("DBFCDX")
MENU oMenu
聽 MENUITEM "Prueba" ACTION Hb_LibDo("ProduccDll","1")
聽 MENUITEM "&Terminar" ACTION oWnd:End()
ENDMENU
DEFINE WINDOW oWnd TITLE "Usando PCode DLL" MDI MENU oMenu
ACTIVATE WINDOW oWnd
hb_LibFree( hDLL )
Return(NIL)Make_Exe.mak - Mak de compilaci贸n del programa principal:
##############################################################################
# Template make file for FWH and Borland Make tool 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 #
# Copyright FiveTech 2002 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽#
##############################################################################
# Win2000 bug ################################################################
# Uncomment next line if you receive any DEL error ###########################
# set DEL=cmd /c del
!if !$d(DEL)
聽 聽DEL = del
!endif
# Make directives ############################################################
.autodepend
.swap
.suffixes: .prg .hrb
# Flags for modules to include: YES | NO (must be UPPERCASE)##################
RES_FILE 聽 聽 聽= NO
LNK_DBFNTX 聽 聽= YES
LNK_DBFCDX 聽 聽= YES
LNK_DEBUG 聽 聽 = NO
LNK_ADVANTAGE = YES
LNK_ODBC 聽 聽 聽= NO
MAP_FILE 聽 聽 聽= NO
# Application directories & filenames ########################################
APP_NAME 聽 聽 聽 聽 = CODEFDLL # (Your EXE name without extension)
APP_PRG_DIR 聽 聽 聽= .
APP_OBJ_DIR 聽 聽 聽= . 聽# (create the app\obj directory first)
APP_INCLUDE_DIR 聽= .
APP_EXE_DIR 聽 聽 聽= $(APP_PRG_DIR)
APP_RES_DIR 聽 聽 聽= $(APP_PRG_DIR)
APP_EXE 聽= $(APP_EXE_DIR)\$(APP_NAME).EXE
APP_RC 聽 = $(APP_RES_DIR)\$(APP_NAME).rc
APP_RES 聽= $(APP_RES_DIR)\$(APP_NAME).res
APP_MAP 聽= $(APP_RES_DIR)\$(APP_NAME).map
# Paths for dependent files ##################################################
.path.prg = $(APP_PRG_DIR)
.path.hrb = $(APP_OBJ_DIR)
.path.obj = $(APP_OBJ_DIR)
# Application PRG files (your PRG files go here) #############################
APP_PRG_LIST = 聽\
聽 聽codefdll.prg 聽\
聽 聽c:\xHarbour\lib\CodePage.lib \
聽 聽c:\xHarbour\lib\Lang.lib \
聽 聽c:\xHarbour\lib\CT.lib \
# Contruction of the rest dependency lists ###################################
APP_PRGS = $(APP_PRG_LIST)
APP_HRBS = $(APP_PRG_LIST:.prg=.hrb)
APP_OBJS = $(APP_PRG_LIST:.prg=.obj)
# Fivewin directories ########################################################
FIVEWIN_INCLUDE_DIR = c:\fwh\include
FIVEWIN_LIB_DIR 聽 聽 = c:\fwh\lib
# Fivewin libraries ##########################################################
FIVE_LIB 聽= c:\fwh\libX\fiveHX.lib
##FIVE_LIB 聽= $(FIVEWIN_LIB_DIR)\fiveHX.lib
FIVEC_LIB = $(FIVEWIN_LIB_DIR)\fiveHC.lib
# Harbour directories & flags ################################################
HARBOUR_INCLUDE_DIR = c:\Xharbour\include
HARBOUR_EXE_DIR 聽 聽 = c:\Xharbour\bin
HARBOUR_LIB_DIR 聽 聽 = c:\Xharbour\lib
# HARBOUR_FLAGS 聽 聽 聽 = -i$(APP_INCLUDE_DIR);$(FIVEWIN_INCLUDE_DIR);$(HARBOUR_INCLUDE_DIR) -n -m -w -es2 -gc0
# El par聽metro -m no deja compilar var. p拢blicas - C.Gallego
HARBOUR_FLAGS 聽 聽 聽 = -i$(APP_INCLUDE_DIR);$(FIVEWIN_INCLUDE_DIR);$(HARBOUR_INCLUDE_DIR) -n -m -w -P > comp.log
HARBOUR_EXE 聽 聽 聽 聽 = $(HARBOUR_EXE_DIR)\harbour.exe
# Harbour libraries ##########################################################
OPT_GUI 聽 聽= $(HARBOUR_LIB_DIR)\optgui.lib
RTL_LIB 聽 聽= $(HARBOUR_LIB_DIR)\rtl.lib
VM_LIB 聽 聽 = $(HARBOUR_LIB_DIR)\vm.lib
GTWIN_LIB 聽= $(HARBOUR_LIB_DIR)\gtgui.lib
LANG_LIB 聽 = $(HARBOUR_LIB_DIR)\lang.lib
MACRO_LIB 聽= $(HARBOUR_LIB_DIR)\macro.lib
RDD_LIB 聽 聽= $(HARBOUR_LIB_DIR)\rdd.lib
DBFNTX_LIB = $(HARBOUR_LIB_DIR)\dbfntx.lib
DBFCDX_LIB = $(HARBOUR_LIB_DIR)\dbfcdx.lib
HBCOMM_LIB = $(HARBOUR_LIB_DIR)\hbcomm.lib
DEBUG_LIB 聽= $(HARBOUR_LIB_DIR)\debug.lib
COMMON_LIB = $(HARBOUR_LIB_DIR)\common.lib
PP_LIB 聽 聽 = $(HARBOUR_LIB_DIR)\pp.lib
MISC_LIB 聽 = $(HARBOUR_LIB_DIR)\libmisc.lib
NANF_LIB 聽 = $(HARBOUR_LIB_DIR)\libnf.lib
DBFFPT_LIB = $(HARBOUR_LIB_DIR)\dbffpt.lib
HBSIX_LIB 聽= $(HARBOUR_LIB_DIR)\hbsix.lib
PCREP_LIB 聽= $(HARBOUR_LIB_DIR)\pcrepos.lib
# Advantage libraries ########################################################
RDDADS_LIB = $(HARBOUR_LIB_DIR)\rddads.lib
ACE32_LIB 聽= $(FIVEWIN_LIB_DIR)\ace32.lib
# Borlanc directories & flags ################################################
BORLANDC_INCLUDE_DIR = c:\Borland\include
BORLANDC_EXE_DIR 聽 聽 = c:\Borland\bin
BORLANDC_LIB_DIR 聽 聽 = c:\Borland\lib
BORLANDC_COMP_FLAGS 聽= -c -O2 -I$(HARBOUR_INCLUDE_DIR);$(BORLANDC_INCLUDE_DIR)
BORLANDC_COMP_EXE 聽 聽= $(BORLANDC_EXE_DIR)\bcc32.exe
BORLANDC_LINK_FLAGS 聽= -Gn -aa -Tpe -s -I$(APP_OBJ_DIR) > link1.log
BORLANDC_LINK_EXE 聽 聽= $(BORLANDC_EXE_DIR)\ilink32.exe
BORLANDC_RES_EXE 聽 聽 = $(BORLANDC_EXE_DIR)\brc32.exe
##BORLANDC_RES_EXE 聽 聽 = C:\PELLESC\BIN\PORC.EXE -iC:\PellesC\include;C:\PellesC\include\win
!if $(MAP_FILE) != YES
聽 聽BORLANDC_LINK_FLAGS = $(BORLANDC_LINK_FLAGS) -x
!endif
# Borland libraries & files ##################################################
STARTUP_OBJ 聽= $(BORLANDC_LIB_DIR)\c0w32.obj
CW32_LIB 聽 聽 = $(BORLANDC_LIB_DIR)\cw32.lib
IMPORT32_LIB = $(BORLANDC_LIB_DIR)\import32.lib
ODBC32_LIB 聽 = $(BORLANDC_LIB_DIR)\psdk\odbc32.lib
LIB_BORL01 聽 = $(BORLANDC_LIB_DIR)\psdk\rasapi32.lib
LIB_BORL02 聽 = $(BORLANDC_LIB_DIR)\psdk\nddeapi.lib
LIB_BORL03 聽 = $(BORLANDC_LIB_DIR)\psdk\msimg32.lib
LIB_BORL04 聽 = $(BORLANDC_LIB_DIR)\psdk\iphlpapi.lib
LIB_BORL05 聽 = $(BORLANDC_LIB_DIR)\psdk\psapi.lib
# Dependencies ###############################################################
all: $(APP_OBJS) $(APP_HRBS) $(APP_EXE)
!if $(RES_FILE) == YES
all: $(APP_RES)
!endif
# Implicit Rules #############################################################
.prg.hrb:
聽 聽$(HARBOUR_EXE) $(HARBOUR_FLAGS) $** -o$@
.hrb.obj:
聽 聽$(BORLANDC_COMP_EXE) $(BORLANDC_COMP_FLAGS) -o$@ $**
# Explicit Rules #############################################################
!if $(RES_FILE) == YES
$(APP_RES) : $(APP_RC)
聽 聽$(BORLANDC_RES_EXE) -r $**
$(APP_EXE) :: $(APP_RES)
聽 聽@if exist $(APP_EXE) $(DEL) $(APP_EXE) > nul
!endif
$(APP_EXE) :: $(APP_OBJS)
聽 聽$(BORLANDC_LINK_EXE) $(BORLANDC_LINK_FLAGS) @&&|
聽 聽$(STARTUP_OBJ) +
聽 聽$(**), +
聽 聽$(APP_EXE), +
聽 聽$(APP_MAP), +
聽 聽$(FIVE_LIB) +
聽 聽$(FIVEC_LIB) +
聽 聽$(RTL_LIB) +
聽 聽$(VM_LIB) +
聽 聽$(GTWIN_LIB) +
聽 聽$(LANG_LIB) +
聽 聽$(MACRO_LIB) +
聽 聽$(RDD_LIB) +
聽 聽$(HBCOMM_LIB) +
聽 聽$(MISC_LIB) +
聽 聽$(NANF_LIB) +
!if $(LNK_DBFNTX) == YES
聽 聽$(DBFNTX_LIB) +
!endif
!if $(LNK_DBFCDX) == YES
聽 聽$(DBFCDX_LIB) +
!endif
聽 聽$(DBFFPT_LIB) +
聽 聽$(HBSIX_LIB) +
!if $(LNK_DEBUG) == YES
聽 聽$(DEBUG_LIB) +
!endif
聽 聽$(COMMON_LIB) +
聽 聽$(PP_LIB) +
聽 聽$(PCREP_LIB) +
!if $(LNK_ADVANTAGE) == YES
聽 聽$(RDDADS_LIB) +
聽 聽$(ACE32_LIB) +
!endif
!if $(LNK_ODBC) == YES
聽 聽$(ODBC32_LIB) +
!endif
聽 聽$(CW32_LIB) +
聽 聽$(IMPORT32_LIB) +
聽 聽$(LIB_BORL01) 聽+
聽 聽$(LIB_BORL02) 聽+
聽 聽$(LIB_BORL03) 聽+
聽 聽$(LIB_BORL04) 聽+
聽 聽$(LIB_BORL05), +
!if $(RES_FILE) == YES
聽 聽,$(APP_RES) +
!endif
|
聽 聽@$(DEL) $(APP_EXE_DIR)\*.tds
聽 聽@$(DEL) $(APP_EXE_DIR)\*.hrb
聽 聽@$(DEL) $(APP_EXE_DIR)\*.obj
聽 聽@$(DEL) $(APP_EXE_DIR)\*.ppopcodedl2.prg - PRG con c贸digo de la DLL
#include "FiveWin.ch"
Function ProduccDll(cAccion)
dbuseArea(.T.,,"customer.DBF","prueba")
wBrowse("DESDE pCodeDl2.dll")
dbCloseAll()
Return(nil)
DYNAMIC DBUSEAREA
DYNAMIC WBROWSE
DYNAMIC DBCLOSEALL
DYNAMIC GETPROCADDRESS
DYNAMIC TACTIVEX
DYNAMIC ERRORSYSMakeDll.bat - Bat para generar la Dll con pcodedl2.prg
@echo off
set hdir=c:\xHarbour
set bcdir=c:\Borland
%hdir%\bin\harbour pcodedl2 聽/n /vd /gc0 /D__EXPORT__ 聽> CLIP.LOG
bcc32 -M -c -O2 -tWD -D__HARBOUR__ -I%hdir%\include pcodedl2.c
if errorlevel 1 goto end
%bcdir%\bin\bcc32 -M -c -O2 -tWD -D__HARBOUR__ -w-nak -D__EXPORT__ -n%hdir%\lib -I%hdir%\include %hdir%\source\vm\maindllp.c
if errorlevel 1 goto end
if exist %1.dll del %1.dll
%hdir%\bin\harbour %1 /n /vd /gc0 /D__EXPORT__ 聽>> CLIP.LOG
if errorlevel 1 goto end
%bcdir%\bin\bcc32 -M -c -O2 -tWD -D__HARBOUR__ -w-nak -D__EXPORT__ -o%1 -I%hdir%\include %1.c
if errorlevel 1 goto end
@echo c0d32w.obj + > hdll.bc
@echo %1.obj, + >> hdll.bc
@echo %1.DLL, + >> hdll.bc
@echo %1.map, + >> hdll.bc
@echo pcodedl2.obj + >> hdll.bc
@echo c:\fwh\libX\FiveHX.lib c:\fwh\lib\FiveHC.lib + >> hdll.bc
@echo %hdir%\lib\maindllp.obj + >> hdll.bc
@echo c:\SuperBrw\Lib\sBrowseHX.lib + >> hdll.bc
@echo c:\lib\fivew_cg\tsbutton\lib\sButtonH.lib + >> hdll.bc
@echo C:\FWH\MISLIB\trsay.obj + >> hdll.bc
@echo %hdir%\lib\rtl.lib + >> hdll.bc
@echo %hdir%\lib\vm.lib + >> hdll.bc
@echo %hdir%\lib\gtgui.lib + >> hdll.bc
@echo %hdir%\lib\lang.lib + >> hdll.bc
@echo %hdir%\lib\macro.lib + >> hdll.bc
@echo %hdir%\lib\rdd.lib + >> hdll.bc
@echo %hdir%\lib\dbfntx.lib + >> hdll.bc
@echo %hdir%\lib\dbfcdx.lib + >> hdll.bc
@echo %hdir%\lib\dbffpt.lib + >> hdll.bc
@echo %hdir%\lib\hbsix.lib + >> hdll.bc
@echo %hdir%\lib\common.lib + >> hdll.bc
@echo %hdir%\lib\pp.lib + >> hdll.bc
@echo %hdir%\lib\\PCREPOS.lib + >> hdll.bc
@echo c:\fwh\lib\Ace32.lib + >> hdll.bc
@echo %bcdir%\lib\cw32.lib + >> hdll.bc
@echo %bcdir%\lib\import32.lib + >> hdll.bc
@echo %bcdir%\lib\psdk\odbc32.lib + >> hdll.bc
@echo %bcdir%\lib\psdk\msimg32.lib + >> hdll.bc
echo %bcdir%\lib\psdk\psapi.lib, >> hdll.bc
%bcdir%\bin\ilink32 -Gn -aa -Tpd -s @hdll.bc 聽> LINK.LOG
if errorlevel 1 goto end
CLS
:end
@echo off
if exist %1.lib del %1.lib
if exist *.tds del *.tds
if exist *.c 聽 del *.c
rem if exist *.bc 聽del *.bc
rem if exist *.log del *.log
if exist *.def del *.def
if exist *.map del *.map
if exist *.obj del *.obj
if exist *.lst del *.lst
set hdir=
set bcdir=Qu茅 cambios debo hacer para poder usar FWH 12.04
xHarbour 煤ltimo SVN del 29-05-2012,
Borland C++ 5.8.2.
Saludos y gracias por su ayuda,
Carlos Gallego
Saludos,
Carlos Gallego
*** FWH-25.12, xHarbour 1.3.1 Build 20241008, Borland C++7.70, PellesC, ADS 11.1***