Page 1 of 1

USO DE UNA DLL ayuda urgente ..

PostPosted: Fri Sep 13, 2013 3:44 am
by guapilescity
Buenas tardes, a los listeros .

No se mucho acerca de las DLL pero tengo una pregunta y haber con su conocimiento me puedes ayudar. Tengo un DLL esta posee una funciones para accesar un lector de tarjetas sin contacto, el asunto que no logro entrarle, para empezar tengo la primeras tengo 2 funciones.

No se si estoy haciendo bien las cosas por tal razon pido ayuda a quien pueda hecharme una mano lo agradezo desde ya..
asi empiesa..

1. Versión DLL
FUNCIÓN: int sVersionDLL(char * Version)
DESCRIPCION: Devuelve la versión de la DLL
IN: Buffer sobre el que se devolverá la tarjeta
OUT (entero) 0=OK / resto=ERROR
Ejemplo Uso:
res=sVersionDLL(buffer);
printf("VERSION DLL [%s]\n",buffer);

2. Comprobar si hay Tarjeta sobre el lector
FUNCION: bool bHayTarjeta(byte TagID[10])
DESCRIPCION: chequea si hay o no tarjeta sobre el lector
IN: Buffer sobre el que se devolverá el ID tarjeta (solo información, no lo vamos a usar
OUT (boolean) true=”hay tarjeta” / false=”No hay tarjeta”
Ejemplo Uso:
res=bHayTarjeta(IDTag);
if(res==TRUE)
printf("TRUE - Hay tarjeta sobre el lector\n");
else
printf("FALSE - No hay tarjeta sobre el lector


Como puedo llamar estas dos funciones
empeze algo asi

Function Carga_Inicial()

#define BTKlib "ACR120U.dll"
#define BTKlib1 "BTK_BADILLA.DLL"

Public hDLL := LoadLibrary(BTKlib)
Public hDLL2 := LoadLibrary(BTKlib1)

Public TagID :=space(10),nPuerto:={0}

Hay_tarjeta()

FreeLibrary( hDLL )
FreeLibrary( hDLL2 )


Return


Function Hay_tarjeta()

?? bHayTarjeta(@TagID )

return

DLL FUNCTION bHayTarjeta( TagID AS CHAR ) AS BOOL PASCAL FROM "bHayTarjeta" LIB hDLL2

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Fri Sep 13, 2013 8:11 am
by Antonio Linares
Empieza comprobando la versión:

Code: Select all  Expand view

#include "FiveWin.ch"
#include "dll.ch"

function Main()

   local cVersion := Space( 100 )

   sVersionDLL( cVersion )

   MsgInfo( cVersion )

return nil

DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS INT PASCAL LIB "ACR120U.dll"
 

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Sat Sep 14, 2013 2:44 am
by guapilescity
Muchas Gracias pora la ayudadita,
Pero resulta que me sale este error


Error Irrecuperable 9003
Demaciadas LLamadas Recursivas Al controlador de errores, agardezco me guies que podra ser,,

Muchas Gracias

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Sat Sep 14, 2013 3:25 am
by guapilescity
Hola ya logre sobre resolver el problema, ahora se presento otro.

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

Stack Calls
===========
Called from: Prepapgo.prg => SVERSIONDLL(0)
Called from: Prepapgo.prg => CARGA_INICIAL(82)
Called from: Prepapgo.prg => ENTRADA(67)

DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS INT PASCAL LIB "BTK_BADILLA.DLL"

creo que algo falto.

#include "FiveWin.ch"
#include "dll.ch"


Function Main()

local cVersion := Space( 100 )
PUBLIC hDLL := LoadLibrary("BTK_BADILLA.DLL")

sVersionDLL( cVersion )
MsgInfo( cVersion )

FreeLibrary( hDLL )

return nil

DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS INT PASCAL LIB hDLL

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Sat Sep 14, 2013 8:15 am
by Antonio Linares
Cambia esta línea asi:

DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS LONG PASCAL LIB hDLL

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Sun Sep 15, 2013 11:09 pm
by guapilescity
Gracia de nuevo , bueno ya no da error,
De primera instanacia ya da la version muchas gracias.

AHora viene otra llamado creo que el mas dificil


3. Inicializar Tarjeta
 FUNCION: int iInicializarTJ(short shPuertoUSB,char *buffer_in)
 DESCRIPCION: Inicializa una tarjeta para empresa HEBA
 IN:
o - shPuertoUSB: Núm del puesto usb del lector. (SIEMPRE 0)
o *buffer_in: buffer de entrada compuesto por los siguientes datos (sep ;)
 lNumTarjeta:8char
 DNI: 8char
 FechaCaducidad: 6char formato ddmmyy
 OUT (entero) 0=OK / resto=ERROR
 Ejemplo Uso:
o Char buffer_Inicializacion[]={"12345678;14224300;311215"};
o res=iInicializarTJ(0,buffer_Inicializacion);

Gracias , haber con esta que esta complicada , gracias desde ya

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Tue Sep 17, 2013 9:47 am
by Antonio Linares
Intentalo tu y si no lo consigues, muestranos aqui tu código e intentaremos ayudarte :-)

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 3:16 am
by guapilescity
Muchas Gracias,
HABER.. ASI EMPEZE , SE CUELGA UN SEGUNDO , PERO DESPUES TERMINA..

#include "FiveWin.ch"
#include "dll.ch"

Function Main3()

local cVersion := SPACE(100) ,Puerto:=0

PUBLIC hDLL := LoadLibrary("BTK_BADILLA.DLL")

iLeerDatosBono(Puerto,cVersion)

MsgInfo( cVersion )

FreeLibrary( hDLL )

return nil

DLL FUNCTION iLeerDatosBono( cResultA AS _INT , cResultB AS LPSTR ) AS LONG PASCAL LIB "BTK_BADILLA.DLL"

/*
Leer Datos del Bono cargado en la tarjeta
FUNCION: int iLeerDatosBono(short sUsbPort,char *buffer_datos)
DESCRIPCION: Lee los Datos del bono tipo monedero de la tarjeta
IN: - shPuertoUSB: Num del puesto usb del lector.

OUT:- *buffer_datos: buffer de salida compuesto por los siguientes datos (sep ;)
iCodBono1: Codigo del bono vigente (0=sin bono)
Estado1: Estado del bono (0-Activo/1-Agotado/2-Caducado/3-Inactivo
iSaldo: Saldo del bono
iViajesSer:Contador viajes por servicio para el bono
iViajesDia:Contador viajes por dia para el bono
Ejemplo Uso:
res=iLeerDatosBono(0,buffer);
. Leer Historico de uso de los bonos
*/

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 7:18 am
by Antonio Linares
El valor que te devuelve es correcto ?

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 1:42 pm
by guapilescity
No Linares, de echo el no devuelve ningun valor, se queda colgado unos segundos y termina , no da errores
Muchas Gracias

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 1:50 pm
by Antonio Linares
Quita la clausula PASCAL de aqui:

DLL FUNCTION iLeerDatosBono( cResultA AS _INT , cResultB AS LPSTR ) AS LONG PASCAL LIB "BTK_BADILLA.DLL"

y la variable que inicializas como Space( 100 ), hazla el doble Space( 200 )

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 10:24 pm
by guapilescity
Una gradecimiento grande por la aportacion de Sr Linares y Sr. Daniel Garcia por la ayuda incondicionada , muchas gracias en verdad.
YA funciona las funciones .

Re: USO DE UNA DLL ayuda urgente ..

PostPosted: Wed Sep 18, 2013 10:26 pm
by guapilescity
POr otro lado lo unico que fata es saber porque cuando hago el llamdo de dos funciones seguida se cuelga un ratito en la el llamado a la segunda y no mas.
Gracias nuevamente eternamente agradecido a ustes.
Muchas Gracias

Problema Solucionado..

PostPosted: Sat Sep 21, 2013 3:43 am
by guapilescity
El Sr. Daniel Garcia encontro el problemas, posiblemente ser aplicado en nuevas versiones, agradezco por su esfuezo y entrega igual que al Sr. Linares.
Muchas Gracias