Antonio S.O.S.... PCODE DLL no funciona

Antonio S.O.S.... PCODE DLL no funciona

Postby Cgallegoa » Wed Dec 19, 2007 6:49 pm

Hola Antonio:

Lamento molestar, pero como he explicado en post anteriores dependemos en nuestra aplicaciones del uso intensivo de código en DLL´s.

Algo tan sencillo como lo siguiente, no logramos hacerlo funcionar con FWH y xHarbour 1.1.0:

TESTDLLP.PRG
#include "FiveWin.ch"

REQUEST DBFCDX

STATIC oWnd

Function Inicio()
LOCAL oMenu
LOCAL hDll := LibLoad( "MSTDLL1.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
LibFree( hDLL )
Return(NIL)



PCODEDLL.PRG
#include "FiveWin.ch"

Function ProduccDll(cAccion)
dbuseArea(.T.,,"PRUEBA2.DBF","prueba")
wBrowse()
dbCloseAll()
Return(nil)


Podrías ayudarme indicándome qué hace falta ?

Perdona que insista, pero me ayudaría mucho, si logras hacerlo funcionar, que me enviases una explicación para niños de cómo lo hiciste, incluído el script para general la Dll. Definitivamente nostros no pudimos. :cry:

Saludos,

Carlos Gallego
Cgallegoa
 
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Postby Cgallegoa » Wed Dec 19, 2007 6:54 pm

Antonio, se me fueron la luces. Por favor corregir:

Cambiar LOCAL hDll := LibLoad( "MSTDLL1.DLL" )
Por LOCAL hDll := LibLoad( "PCODEDLL.DLL" )

Y como no envié la base PRUEBA2.DBF, por favor prueba con cualquiera.

Saludos,

Carlos Gallego
Cgallegoa
 
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Postby Antonio Linares » Wed Dec 19, 2007 8:28 pm

Carlos,

Tu ejemplo funciona perfectamente. Sólo tienes que añadir:

1) a TESTDLLP.prg:

REQUEST DBFCDX, DBUSEAREA, WBROWSE, DBCLOSEALL

2) a PCODEDLL.prg:

DYNAMIC dbuseArea
DYNAMIC wBrowse
DYNAMIC dbCloseAll
DYNAMIC GETPROCADDRESS
DYNAMIC TACTIVEX
DYNAMIC ERRORSYS

Si quieres te envio el EXE y la DLL para que los pruebes ahí :-)

Image
regards, saludos

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

Postby Cgallegoa » Wed Dec 19, 2007 8:42 pm

Hola Antonio:

Gracias, funcionó bien. Me quedan tres prueguentas:

1.-Cada función o procedure (Clipper, fivewin o progra) que sea invocado en la DLL deberá citarse con REQUEST en el programa PRINICIPAL y su contraparte como DYNAMIC en la DLL. Es correcto ? Observo que tienen que ir al comienzo del PRG

2.- En una DLL con mucho código, se pueden estar invocando decenas de funciones/procedures, entonces, cuál sería la forma de incluírlas tanto en el programa principal como en la DLL que no sea tan tedioso y tenga que declararse una por una. Pordría ser, por ejemplo, poniéndolas en un archivo tipo INCLUDE, ejemplo, "LosRequest.ch" y "LosDynamics.ch" ? o de qué manera ?

3.- Cómo controlar el error dentro de la DLL, en cuál línea se produce y cuál es el error. No saca ningún mensaje aparte del típico de Windows. Tampoco reconoce logfile.

Saludos,

Carlos Gallego
Cgallegoa
 
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Postby Antonio Linares » Wed Dec 19, 2007 9:08 pm

Carlos,

>
1.-Cada función o procedure (Clipper, fivewin o progra) que sea invocado en la DLL deberá citarse con REQUEST en el programa PRINICIPAL y su contraparte como DYNAMIC en la DLL. Es correcto ?
>



> Observo que tienen que ir al comienzo del PRG

No necesariamente. Es lo típico, pero puedes usar REQUEST al final, etc.

>
poniéndolas en un archivo tipo INCLUDE, ejemplo, "LosRequest.ch" y "LosDynamics.ch" ?
>

Sí, sería lo idóneo

>
3.- Cómo controlar el error dentro de la DLL, en cuál línea se produce y cuál es el error. No saca ningún mensaje aparte del típico de Windows. Tampoco reconoce logfile.
>

Aqui la gestión de errores en la DLL funciona perfectamente. Modifica tu ejemplo de esta forma:

Function ProduccDll(cAccion)
x++

y aparece la ventana de errores de FWH dando la información correcta:

Error description: Error BASE/1003 Variable does not exist: X

Stack Calls
===========
Called from: pcodedl2.prg => PRODUCCDLL(4)
Called from: => HB_LIBDO(0)
Called from: cgallego.prg => (b)INICIO(12)
Called from: MENU.PRG => TMENU:COMMAND(0)
Called from: WINDOW.PRG => TWINDOW:COMMAND(0)
Called from: MDIFRAME.PRG => TMDIFRAME:COMMAND(0)
Called from: => TMDIFRAME:HANDLEEVENT(0)
Called from: WINDOW.PRG => _FWH(0)
Called from: => WINRUN(0)
Called from: WINDOW.PRG => TMDIFRAME:ACTIVATE(0)
Called from: cgallego.prg => INICIO(16)

Estás usando un gestor de errores distinto al estandard de FWH ?
regards, saludos

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

Postby Cgallegoa » Wed Dec 19, 2007 9:27 pm

Muy bien.

>
1.-Cada función o procedure (Clipper, fivewin o progra) que sea invocado en la DLL deberá citarse con REQUEST en el programa PRINICIPAL y su contraparte como DYNAMIC en la DLL. Es correcto ?
>

< Sí >

Esto incluye dbeval, dbgotop, dbgoto, dbgobottom, recno, etc., etc, etc. ?

Es decir, toca hacer un include kilométrico con todas las funciones de Clipper / xHarbour . :? Alguna idea ?

< Estás usando un gestor de errores distinto al estandard de FWH ? >

No. A veces toma el gestor normal de errores de FW, otras veces manda la ventana de Windows, que no dice nada.

En todo caso vamos avanzando. Que con tu ayuda terminanos el año domando las condenadas DLLs :D

Saludos,

Carlos Gallego
Cgallegoa
 
Posts: 494
Joined: Sun Oct 16, 2005 3:32 am
Location: Quito - Ecuador

Postby Antonio Linares » Wed Dec 19, 2007 9:33 pm

Carlos,

Esto puede servirte :-)
Code: Select all  Expand view  RUN
   REQUEST ;
   AADD,;           
   ABS,;             
   ACHOICE,;         
   ACLONE,;         
   ACOPY,;           
   ADEL,;           
   ADIR,;           
   AEVAL,;           
   AFIELDS,;         
   AFILL,;           
   AINS,;           
   ALERT,;           
   ALIAS,;           
   ALLTRIM,;         
   AMPM,;           
   ARRAY,;           
   ASC,;             
   ASCAN,;           
   ASIZE,;           
   ASORT,;           
   AT,;             
   ATAIL,;           
   BIN2I,;           
   BIN2L,;           
   BIN2U,;           
   BIN2W,;           
   BOF,;             
   BROWSE,;         
   CDOW,;           
   CHR,;             
   CMONTH,;         
   COL,;             
   CTOD,;           
   CURDIR,;         
   DATE,;           
   DAY,;             
   DAYS,;           
   DBAPPEND,;       
   DBCLEARFILTER,;   
   DBCLEARINDEX,;   
   DBCLEARRELATION,;
   DBCLOSEALL,;     
   DBCLOSEAREA,;     
   DBCOMMIT,;       
   DBCOMMITALL,;     
   DBCREATE,;       
   DBCREATEINDEX,;   
   DBDELETE,;       
   DBEDIT,;         
   DBEVAL,;         
   DBF,;             
   DBFILTER,;       
   DBGOBOTTOM,;     
   DBGOTO,;         
   DBGOTOP,;         
   DBRECALL,;       
   DBREINDEX,;       
   DBRELATION,;     
   DBRLOCK,;         
   DBRLOCKLIST,;     
   DBRSELECT,;       
   DBRUNLOCK,;       
   DBSEEK,;         
   DBSELECTAREA,;   
   DBSETDRIVER,;     
   DBSETFILTER,;     
   DBSETINDEX,;     
   DBSETORDER,;     
   DBSETRELATION,;   
   DBSKIP,;         
   DBSTRUCT,;       
   DBUNLOCK,;       
   DBUNLOCKALL,;     
   DBUSEAREA,;       
   DELETED,;         
   DESCEND,;         
   DEVOUT,;         
   DEVOUTPICT,;     
   DEVPOS,;         
   DIRECTORY,;       
   DIRCHANGE,;       
   DIRREMOVE,;       
   DISKSPACE,;       
   DISPBEGIN,;       
   DISPCOUNT,;       
   DISPEND,;         
   DISPOUT,;         
   DOW,;             
   DTOC,;           
   DTOS,;           
   ELAPTIME,;       
   EMPTY,;           
   EOF,;             
   ERRORNEW,;       
   EVAL,;           
   EXP,;             
   FCLOSE,;         
   FCOUNT,;         
   FCREATE,;         
   FERASE,;         
   FERROR,;         
   FIELD,;           
   FIELDBLOCK,;     
   FIELDGET,;       
   FIELDNAME,;       
   FIELDPOS,;       
   FIELDPUT,;       
   FIELDWBLOCK,;     
   FILE,;           
   FLOCK,;           
   FOPEN,;           
   FOUND,;           
   FREAD,;           
   FREADSTR,;       
   FRENAME,;         
   FSEEK,;           
   FWRITE,;         
   GETACTIVE,;       
   GETAPPLYKEY,;     
   GETDOSETKEY,;     
   GETENV,;         
   GETNEW,;         
   GETPREVALIDATE,; 
   GETPOSTVALIDATE,;
   GETREADER,;       
   HARDCR,;         
   HB_ANSITOOEM,;   
   HB_DISKSPACE,;   
   HB_FEOF,;         
   HB_OEMTOANSI,;   
   HEADER,;         
   I2BIN,;           
   IF,;             
   INDEXEXT,;       
   INDEXKEY,;       
   INDEXORD,;       
   INKEY,;           
   INT,;             
   ISAFFIRM,;       
   ISALPHA,;         
   ISDIGIT,;         
   ISDISK,;         
   ISLOWER,;         
   ISNEGATIVE,;     
   ISUPPER,;         
   L2BIN,;           
   LASTKEY,;         
   LASTREC,;         
   LEFT,;           
   LEN,;             
   LOG,;             
   LOWER,;           
   LTRIM,;           
   LUPDATE,;         
   MAKEDIR,;         
   MAX,;             
   MAXCOL,;         
   MAXROW,;         
   MCOL,;           
   MEMOEDIT,;       
   MEMOTRAN,;       
   MEMOLINE,;       
   MEMORY,;         
   MEMOREAD,;       
   MEMOTRAN,;       
   MEMOWRIT,;       
   MEMVARBLOCK,;     
   MIN,;             
   MLCOUNT,;         
   MLCTOPOS,;       
   MLPOS,;           
   MOD,;             
   MONTH,;           
   MPOSTOLC,;       
   MROW,;           
   NATIONMSG,;       
   NETERR,;         
   NETNAME,;         
   NEXTKEY,;         
   ORDBAGEXT,;       
   ORDBAGNAME,;     
   ORDCREATE,;       
   ORDDESTROY,;     
   ORDFOR,;         
   ORDKEY,;         
   ORDLISTADD,;     
   ORDLISTCLEAR,;   
   ORDLISTREBUILD,; 
   ORDNAME,;         
   ORDNUMBER,;       
   ORDSETFOCUS,;     
   OS,;             
   OUTERR,;         
   OUTSTD,;         
   PADC,;           
   PADL,;           
   PADR,;           
   PCOL,;           
   PCOUNT,;         
   PROCFILE,;       
   PROCLINE,;       
   PROCNAME,;       
   PROW,;           
   RAT,;             
   RDDLIST,;         
   RDDNAME,;         
   RDDSETDEFAULT,;   
   READEXIT,;       
   READUPDATED,;     
   READINSERT,;     
   READKEY,;         
   READFORMAT,;     
   READKILL,;       
   READMODAL,;       
   READUPDATED,;     
   READVAR,;         
   RECCOUNT,;       
   RECNO,;           
   RECSIZE,;         
   REPLICATE,;       
   RESTSCREEN,;     
   RIGHT,;           
   RLOCK,;           
   ROUND,;           
   ROW,;             
   RTRIM,;           
   SAVESCREEN,;     
   SCROLL,;         
   SECONDS,;         
   SECS,;           
   SELECT,;         
   SET,;             
   SETCOLOR,;       
   SETCURSOR,;       
   SETKEY,;         
   SETMODE,;         
   SETPOS,;         
   SETPRC,;         
   SETTYPEAHEAD,;   
   SPACE,;           
   SQRT,;           
   STR,;             
   STRTRAN,;         
   STRZERO,;         
   STUFF,;           
   SUBSTR,;         
   TBROWSENEW,;     
   TBROWSEDB,;       
   TBCOLUMNNEW,;     
   TIME,;           
   TONE,;           
   TRANSFORM,;       
   TRIM,;           
   TYPE,;           
   U2BIN,;           
   UPDATED,;         
   UPPER,;           
   USED,;           
   VAL,;             
   VALTYPE,;         
   VERSION,;         
   W2BIN,;           
   WORD,;           
   HB_FNAMESPLIT,;   
   HB_FNAMEMERGE
regards, saludos

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

Postby Antonio Linares » Wed Dec 19, 2007 9:34 pm

Carlos,

> ... otras veces manda la ventana de Windows, que no dice nada.

A ver si pudieses conseguirme un ejemplo que genere un error de esos, gracias :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42160
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 57 guests