Imagen

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

Este es el foro para resolver dudas y hacer comentarios de las librerias DLL de generacion y timbrado que se ofrece aqui en el foro
Cerrado
interwin
Mensajes: 64
Registrado: Dom Ene 22, 2012 7:36 pm

CFDLib.dll y Xharbour

Mensaje por interwin »

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
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: CFDLib.dll y Xharbour

Mensaje por Dado »

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.
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
interwin
Mensajes: 64
Registrado: Dom Ene 22, 2012 7:36 pm

Re: CFDLib.dll y Xharbour

Mensaje por interwin »

Dado.

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
Pero algo estoy haciendo mal porque el programa se bloquea al llamar la funcion generacfd.

Saludos.

Jose Rios.
Avatar de Usuario
Dado
Mensajes: 15981
Registrado: Mar Jul 06, 2010 7:56 pm

Re: CFDLib.dll y Xharbour

Mensaje por Dado »

No programo en XHarbour pero me parece que esto no tiene logica

Código: Seleccionar todo

if allTrim(GetError())=''
                   MSGINFO(GetError())
                   MSGINFO(GetErrorExt())
           endIf
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
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
Cerrado