USO DE UNA DLL ayuda urgente ..

Post Reply
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

USO DE UNA DLL ayuda urgente ..

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE UNA DLL ayuda urgente ..

Post by Antonio Linares »

Empieza comprobando la versión:

Code: Select all

#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"
 
regards, saludos

Antonio Linares
www.fivetechsoft.com
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE UNA DLL ayuda urgente ..

Post by Antonio Linares »

Cambia esta línea asi:

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

Antonio Linares
www.fivetechsoft.com
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE UNA DLL ayuda urgente ..

Post by Antonio Linares »

Intentalo tu y si no lo consigues, muestranos aqui tu código e intentaremos ayudarte :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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
*/
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE UNA DLL ayuda urgente ..

Post by Antonio Linares »

El valor que te devuelve es correcto ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post by guapilescity »

No Linares, de echo el no devuelve ningun valor, se queda colgado unos segundos y termina , no da errores
Muchas Gracias
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: USO DE UNA DLL ayuda urgente ..

Post 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 )
regards, saludos

Antonio Linares
www.fivetechsoft.com
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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 .
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Re: USO DE UNA DLL ayuda urgente ..

Post 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
guapilescity
Posts: 22
Joined: Thu Nov 01, 2012 1:23 am

Problema Solucionado..

Post 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
Post Reply