Pregunta: | 62280 - LLAMADAS A FUNCIONES DENTRO DE UNA DLL |
Autor: | Juan Antonio Macareno Palacios |
Para los expertos en visual, aqui expongo mi problema, espero me orienten en los errores
que esto cometiendo, gracias. Me mandaron una libreria (sgenc32.dll) y junto con ella me mandaron el codigo para accesar via Visual Basic que es el siguiente: ' Definiciones VB ' Estructura anterior Public Type registro_CURP curp As String * 19 archivokey As String * 256 password As String * 256 End Type ' Estructura actual (Generica) Public Type registro_CURPG curp As String * 19 archivokey As String * 256 archivocer As String * 256 password As String * 256 End Type ' Funciones anteriores Declare Function BuscaCurps Lib "sgenc32" Alias "_BuscaCurps@8" (ByVal strArchOrig As String, ByRef CURPS() As registro_CURP) As Long Declare Function GeneraFirmaDigital Lib "sgenc32" Alias "_GeneraFirmaDigital@8" (ByVal strArchOrig As String, ByRef CURPS() As registro_CURP) As Long ' Funciones actuales (Genericas) Declare Function BuscaCurpsG Lib "sgenc32" Alias "_BuscaCurpsG@12" (ByVal strArchOrig As String, ByVal tipo As Long, ByRef CURPS() As registro_CURPG) As Long Declare Function GeneraFirmaDigitalG Lib "sgenc32" Alias "_GeneraFirmaDigitalG@12" (ByVal strArchOrig As String, ByVal tipo As Long, ByRef CURPS() As registro_CURPG) As Long Nuevos Códigos de Error: 10 = Tipo de documento a firmar no valido 11 = No se pudo leer el certificado 12 = Certificado caduco. 13 = El archivo contiene más de un registro 201. Donde tipo = Tipo de documento a firmar 0 (cero) = PEDIMENTOS 1 = ENCARGOS 2 = AVISOs DE TRANSFERENCIA Genero una estructura llamada MCURPG de la siguiente manera: Public MCURPG(0 To 9) As registro_CURPG luego, cuando hago la llamada a la libreria escribo el siguiente codigo para recibir un resultado de respuesta o de "estado" sobre la llamada (status). status = BuscaCurpsG(ByVal mstrArchOrig, ByVal mtipo, MCURPG) Donde status me regresa un 0 y esto se refiere a que hubo exito en la llamada de la libreria, para esto compruebo con un print si en la estructura viene el dato de la cupr en esta forma: Print status, MCURPG(0).curp y la estructura MCURPG(0).curp si trajo un dato o recibio un dato de la libreria sgenc32.dll, Hasta aqui todo esta correcto, el siguiente paso es volver a accesar a la libreria y enviar los siguientes datos: MCURPG(0).archivocer = "c: mpdavs.cer" MCURPG(0).archivokey = "C:TMPDAVS.key" MCURPG(0).password = "davsh02" firmadig = GeneraFirmaDigitalG(ByVal mstrArchOrig, ByVal mtipo, MCURPG) Aqui es donde comienza el problema, porque firmadig es la variable que recibo con el estado de la llamada a la libreria, y siempre me manda el codigo 11 (no se pudo leer el certificado). Por lo que yo pienso que no estoy enviando bien la estructura a la libreria con la informacion que requiere para generar la firma digital. Espero poderme explicar cual es mi situacion y gracias por sus prontas respuestas. Saludos. |
Respuesta: | FTanori . |
Para utilizar las funciones "G" la estructura "G" debes indicar el Certificado
MCURPG(0).archivocer = "c: mpdavs.cer" MCURPG(0).archivokey = "C:TMPDAVS.key" MCURPG(0).archivocer = "C:TMPDAVS.cer" ' <=== Incluir Certificado MCURPG(0).password = "davsh02" ============================================================== |
Respuesta: | Juan Antonio Macareno Palacios. |
Al fin, problema solucionado, genere un programa externo para que sea llamado desde visual fox con parametros, esto es...
nombredelprograma.exe "parametroarchivo|parametrocertificado|parametroarchivokey|parametroclave" y listo, ya esta en funcionamiento. Saludos |