USO DE UNA DLL ayuda urgente ..
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
USO DE UNA DLL ayuda urgente ..
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE UNA DLL ayuda urgente ..
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"
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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
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
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE UNA DLL ayuda urgente ..
Cambia esta línea asi:
DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS LONG PASCAL LIB hDLL
DLL FUNCTION sVersionDLL( cResult AS LPSTR ) AS LONG PASCAL LIB hDLL
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE UNA DLL ayuda urgente ..
Intentalo tu y si no lo consigues, muestranos aqui tu código e intentaremos ayudarte
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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
*/
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
*/
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE UNA DLL ayuda urgente ..
El valor que te devuelve es correcto ?
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
No Linares, de echo el no devuelve ningun valor, se queda colgado unos segundos y termina , no da errores
Muchas Gracias
Muchas Gracias
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: USO DE UNA DLL ayuda urgente ..
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 )
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 )
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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 .
YA funciona las funciones .
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Re: USO DE UNA DLL ayuda urgente ..
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
Gracias nuevamente eternamente agradecido a ustes.
Muchas Gracias
-
- Posts: 22
- Joined: Thu Nov 01, 2012 1:23 am
Problema Solucionado..
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
Muchas Gracias