Visual Basic - Llamada a funcion sgenc32.dll

Life is soft - evento anual de software empresarial
   
Vista:

Llamada a funcion sgenc32.dll

Publicado por Juan Antonio Macareno Palacios (9 intervenciones) el 22/09/2009 02:12:53
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:\tmp\davs.cer"
MCURPG(0).archivokey = "C:\TMP\DAVS.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.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamada a funcion sgenc32.dll

Publicado por juan carlos (518 intervenciones) el 23/09/2009 05:20:04
intentalo asi Antonio
======================================================================

Public Type registro_CURP
curp As String * 19
archivokey As String * 128
password As String * 20
End Type

Declare Function BuscaCurps Lib "sgenc32" Alias "_BuscaCurps@8" (ByVal vstrArchKEY 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
======================================================================

Private Sub Command1_Click()
Call GeneraFirmaDigital("rt", CURPS(trey8654654656546uu))
End Sub

Private Sub Command2_Click()
Call GeneraFirmaDigital("cadena", CURPS(numero))
Call BuscaCurps("cadena", CURPS(numero))
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a funcion sgenc32.dll

Publicado por Juan Antonio Macareno Palacios (9 intervenciones) el 23/09/2009 22:27:47
Juan Carlos, muchas gracias, ya hice lo que me sugieres con una pequeña variacion por errores de compilacion.

en un modulo .pas declare la estructura MCURPS de la siguiente manera:
Public MCURPS(0 to 10) as registro_CURP
porque al llamar a la funcion me marcaba errores que se esperaba un array.

luego en el formulario utilice el codigo que me sugeriste de la siguiente manera:

Private Sub Command2_Click()
estado = BuscaCurps("archivotextoafirmar.txt", MCURPS())
firmadig = GeneraFirmaDigital("archivotextoafirmar.txt", CURPS())
End Sub

Para cerciorarme de que valor de retorno me enviaria la libreria DLL mande a imprimir los resultados y en estado, me retorna un 0 que es una transaccion exitosa y mande a imprimir MCURPS(0).curp y me trae el curp que viene dentro de ese archivo.

ahora, en la segunda funcion GenerafirmaDigital, aqui es donde tengo que hacer que la libreria sgenc32.dll me genera una cadena de caractares que es la firma dgital, creo yo que tengo que enviarle la estructura llena osea .. MCURPS(0).curp ya tomo un valor del retorno de la funcion BuscaCurps(), ahora, como hago para asignar a la estructura MCURPS(0).archivokey el dato del archvivo .key y que se lo transfiera a la funcion GeneraFirmaDigital...

Porque si no asigno nada, obviamente pasa en blanco y me retorna un valor 3 para firmadig, que dice que no puede desencriptar la llave privada, pero si asigno el nombre del archivo key, y el password de la estructura MCURPS, me arroja el mismo error como si estuviera pasando en blanco...

Espero poder darme a entender... gracias Juan Carlos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a funcion sgenc32.dll

Publicado por Jesús Velázquez (1 intervención) el 10/02/2010 01:57:52
Saludos Juan Carlos y Juan Antonio

Se que quiza no sea este el lugar pero es la unica parte donde he encontrado informacion sobre esta libreria (sgenc32.dll), espero que puedan ayudarme con mi problema, de antemano muchas gracias.

Primer punto, yo quiero hacer uso de esta libreria desde una aplicacion desarrollada en VFP 9.0. Si lo anterior no es problema, lo segundo seria saber donde puedo encontrar los metodos o funciones que esten encapsulados en esta libreria, ya que no encuentro nunguna documentacion que me ayude al respecto. Por ultimo, me gustaria saber si pueden explicarme como invoco dichas funciones pero en VFP.

Sin mas por el momento, espero que me puedan ayudar y se los agradezco de antemano.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a funcion sgenc32.dll

Publicado por Juan Antonio Macareno Palacios (9 intervenciones) el 23/04/2010 02:14:39
Definitivamente no hay modo de llamarlo en VFP directamente, aqui lo que yo estoy buscando hacer es una funcion externa para que VFP mande los parametros de curp, archivo, y password, y la funcion externa use la libreria, genere los datos y firme el archivo.
Saludos.

Si tienes algo avanzado te agradeceria el comentario.

Nuevamente Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a funcion sgenc32.dll

Publicado por Juan Antonio Macareno Palacios (9 intervenciones) el 09/11/2010 22:51:48
Despues de tanto investigar, tuve que hacer lo siguiente:

Desarrolle una aplicacion en visual basic para generar la firma electronica de los archivos de validacion, esto es, usando la libreria sgenc32.dll, utilice sus funciones internas para que la libreria en cuestion generara la firma digital y firmara los archivos que yo deseaba.

esta aplicacion la llame firmadapex.exe y la llamo desde visual foxpro, le tuve que enviar parametros desde visual fox en la llamada al programa de tal manera que la llamada al programa es de la siguiente manera:

run firmadapex.exe "rutadelarchivoafirmar|rutadelarchivocer|rutadelarchivokey|claveopasswordparaaccesaralosarchivos"

y la integre al sistema de pedimentos.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada a funcion sgenc32.dll

Publicado por Angel Glez (1 intervención) el 27/12/2010 19:28:08
Hola

Quizas se ha demasiado tarde tu error se soluciona concatenando Chr(0) a en cada opción, es decir:

Dim status As Long

MCURPG(0).archivocer = "c:\tmp\davs.cer" '& Chr(0)
MCURPG(0).archivokey = "C:\TMP\DAVS.key" '& Chr(0)
MCURPG(0).password ="davsh02" '& Chr(0)

Despues eso mandas a llamar tu función de la siguiente manera:

status = GeneraFirmaDigitalG("C:\Archivom3\m3702691.315", 0, MCURPG)

Utilize VB6 desafortunadamente a mi no me sirve para c# 2008 pues siempre me marca el error " Intento de leer o escribir en la memoria protegida. A menudo, esto indica que hay otra memoria dañada." Alguien podria ayudarnos...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamada a funcion sgenc32.dll

Publicado por Diego Luna C. (1 intervención) el 11/10/2012 03:58:51
Alguien sabe si existe esta librería en PHP ??

Encontré los manuales de instalación y usuario.
Por si alguien más lo está haciendo.

http://www.mediafire.com/?rzrhq92zrur3qci

La verdad hace mucho que no uso visual, espero no batallar tanto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar