Hola
Estoy empezando a hacer pruebas con esta libreria y xHarbour+FiveWin, ya pude generar una factura electronica usando:
DLL32 FUNCTION GeneraCFD(cArchivoIni AS LPSTR, cPass AS LPSTR) AS BOOL PASCAL FROM "GeneraCFD" LIB "CFDLib.dll"
DLL32 FUNCTION GetError() AS STRING PASCAL FROM "GetError" LIB "CFDLib.dll"
DLL32 FUNCTION GetErrorExt() AS STRING PASCAL FROM "GetErrorExt" LIB "CFDLib.dll"
y llamando a la funciones para crear el CFD:
GeneraCFD(cDirectorioPrograma+'\Tempo.ini', allTrim(Certs->PassKey) )
MSGINFO(GetError())
MSGINFO(GetErrorExt())
Cuando el archivo de entrada es correcto, se genera el XML bien.
Cuando el archivo de entrada es incorrecto, no se genera el XML pero GETERROR Y GETERROREXT regresan una cadena vacia en lugar de dar el detalle de los errores
Si estas usando esta libreria con xHarbour y FiveWin, ¿como la impementaste?
De antemano muchas gracias
Jose Rios

DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
CFDLib.dll y Xharbour
- Dado
- Mensajes: 15981
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: CFDLib.dll y Xharbour
Todos los ejemplos que incluyo en la libreria han sido proporcionados por usuarios como tu que amablemente me han enviado su codigo.
Yo no programo en XHarbour e igual voy a decir puras mensadas pero dentro de la libreria NO USO CADENAS ESTANDAR DE PASCAL, uso CADENAS ESTANDAR DE LENGUAJE "C"
Asi pues, intenta quitar la directiva "Pascal" para ver si con eso puedes obtener el resultado.
Tambien puedes intentar hacer una llamada a CFDLibVersion esa funcion SIEMPRE regresa un string con la version, de esa forma puedes probar como leer una cadena de mis rutinas
Precisamente haciendo incapie a que los ejemplos me los han pasado te aconsejaria que BUSQUES aqui en el foro "XHarbour" o "fivewin" hay ejemplos e informacion que talvez puedan ayudarte.
pd. movi tu tema aqui a "soporte libreria cfdlib.dll" que es donde deberia estar. saludos.
Yo no programo en XHarbour e igual voy a decir puras mensadas pero dentro de la libreria NO USO CADENAS ESTANDAR DE PASCAL, uso CADENAS ESTANDAR DE LENGUAJE "C"
Asi pues, intenta quitar la directiva "Pascal" para ver si con eso puedes obtener el resultado.
Tambien puedes intentar hacer una llamada a CFDLibVersion esa funcion SIEMPRE regresa un string con la version, de esa forma puedes probar como leer una cadena de mis rutinas
Precisamente haciendo incapie a que los ejemplos me los han pasado te aconsejaria que BUSQUES aqui en el foro "XHarbour" o "fivewin" hay ejemplos e informacion que talvez puedan ayudarte.
pd. movi tu tema aqui a "soporte libreria cfdlib.dll" que es donde deberia estar. saludos.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 64
- Registrado: Dom Ene 22, 2012 7:36 pm
Re: CFDLib.dll y Xharbour
Dado.
Muchas gracias por responder. Ya pude hacer que funcionara la lib con xharbour y fivewin haciendo lo siguiente:
Con esta implementacion ya puedo generar el cfd y visualizar la cadena con la informacion de los errores obtenidos con GetError y GetErrorExt, lo unico que no me funciona es al visualizar el valor regresado por por las funciones GeneraCFD y PruebaClaveDeLlavePrivada que regresan un valor tipo boolean, en estos casos siempre obtengo true aunque se se haya producido un error.
Tambien segui tu recomendacion de intentar en modo c en lugar de modo pascal pero la verdad casi de lenguaje C no se nada, lo intente de la siguiente forma dentro de mi programa en xharbour y fivewin:
Pero algo estoy haciendo mal porque el programa se bloquea al llamar la funcion generacfd.
Saludos.
Jose Rios.
Muchas gracias por responder. Ya pude hacer que funcionara la lib con xharbour y fivewin haciendo lo siguiente:
Código: Seleccionar todo
static hLibCFD
function main ()
.
.
.
AbreDLL()
GeneraCFD(cDirectorioPrograma+'\Tempo.ini', allTrim(Certs->PassKey) )
if allTrim(GetError())=''
MSGINFO(GetError())
MSGINFO(GetErrorExt())
endIf
.
.
.
return NIL
Static Function AbreDLL()
LOCAL lRet:=.F.
LOCAL cDllName:="CFDLib.dll"
hLibCFD:=LoadLibrary(cDllName)
if Abs( hLibCFD ) <= 32
MsgAlert( "Error code: " + LTrim( Str( hLibCFD ) ) + " loading " + cDllName )
lRet:=.F.
else
lRet:=.T.
endif
Return lRet
DLL32 FUNCTION GeneraCFD(cArchivoIni AS LPSTR, cPass AS LPSTR) AS BOOL PASCAL FROM "GeneraCFD" LIB hLibCFD
DLL32 FUNCTION GetError() AS LPSTR PASCAL FROM "GetError" LIB hLibCFD
DLL32 FUNCTION GetErrorExt() AS LPSTR PASCAL FROM "GetErrorExt" LIB hLibCFD
DLL32 FUNCTION CadenaOriginal() AS LPSTR PASCAL FROM "CadenaOriginal" LIB hLibCFD
DLL32 FUNCTION SelloDigital() AS LPSTR PASCAL FROM "SelloDigital" LIB hLibCFD
DLL32 FUNCTION CFDLibVersion() AS STRING PASCAL FROM "CFDLibVersion" LIB hLibCFD
DLL32 FUNCTION PruebaSimple() AS LPSTR FROM "PruebaSimple" LIB hLibCFD
DLL32 FUNCTION PruebaClaveDeLlavePrivada(cKey AS LPSTR, cClave AS LPSTR) AS BOOL PASCAL FROM "PruebaClaveDeLlavePrivada" LIB hLibCFD
DLL32 FUNCTION TimbrarCFD(cArchivoIni AS LPSTR) AS LPSTR PASCAL FROM "TimbrarCFD" LIB hLibCFD
Con esta implementacion ya puedo generar el cfd y visualizar la cadena con la informacion de los errores obtenidos con GetError y GetErrorExt, lo unico que no me funciona es al visualizar el valor regresado por por las funciones GeneraCFD y PruebaClaveDeLlavePrivada que regresan un valor tipo boolean, en estos casos siempre obtengo true aunque se se haya producido un error.
Tambien segui tu recomendacion de intentar en modo c en lugar de modo pascal pero la verdad casi de lenguaje C no se nada, lo intente de la siguiente forma dentro de mi programa en xharbour y fivewin:
Código: Seleccionar todo
function main()
.
.
hLib := LOADL( "CFDLib.dll" )
GENERACFD(hLib,cDirectorioPrograma+'\Tempo.ini',allTrim(Certs->PassKey))
.
.
return NIL
#pragma BEGINDUMP
#include <hbapi.h>
#include <windows.h>
HB_FUNC( LOADL )
{
hb_retnl( (long)LoadLibrary( hb_parc( 1 ) ) );
}
HB_FUNC(GENERACFD)
{
typedef long ( __cdecl * __GeneraCFD )( char * szArchivoIni, char * szPasKey);
__GeneraCFD GeneraCFD = (__GeneraCFD)GetProcAddress( (HMODULE)hb_parnl( 1 ), "GeneraCFD" );
hb_retnl( GeneraCFD( hb_parc( 2 ), hb_parc( 3 ) ));
}
#pragma ENDDUMP
Saludos.
Jose Rios.
- Dado
- Mensajes: 15981
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: CFDLib.dll y Xharbour
No programo en XHarbour pero me parece que esto no tiene logica
yo lo interpreto como :
Si GetError es igual a NADA entonces muestra un mensaje de GetError (NADA!!!)
Deberia ser mas o menos asi :
if GeneraCFD(cDirectorioPrograma+'\Tempo.ini', allTrim(Certs->PassKey) ) = 0
_____El timbrado fue exitoso
else
_______hubo un error, el error esta en GetError()
Checa que tienes que revisar LO QUE DEVUELVE GeneraCFD y si es un cero significa que todo esta bien, si no es cero entonces hubo un error
Código: Seleccionar todo
if allTrim(GetError())=''
MSGINFO(GetError())
MSGINFO(GetErrorExt())
endIf
Si GetError es igual a NADA entonces muestra un mensaje de GetError (NADA!!!)
Deberia ser mas o menos asi :
if GeneraCFD(cDirectorioPrograma+'\Tempo.ini', allTrim(Certs->PassKey) ) = 0
_____El timbrado fue exitoso
else
_______hubo un error, el error esta en GetError()
Checa que tienes que revisar LO QUE DEVUELVE GeneraCFD y si es un cero significa que todo esta bien, si no es cero entonces hubo un error
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!