Lazarus

Other Languages => Spanish => Topic started by: hexxa on June 23, 2021, 04:09:13 pm

Title: Problema con libreria dinamica
Post by: hexxa on June 23, 2021, 04:09:13 pm
Buen día, tengo un inconveniente con el uso de una librería dinamica compilada a partir de los fuentes.
No se si estoy haciendo bien los pasos para compilarla.
Los fuentes estan descargados de https://github.com/reingart/pyafipws/tree/master/src.
Para compilar uso:
  gcc -c libpyafipws.c -o libpyafipws.o -fPIC
  ld -o libpyafipws.so libpyafipws.o -shared
La libreria se crea correctamente, sin errores. Tiene los permisos correctos, la copie a la carperta donde esta el ejecutable desde el cual intento utilizarla, ademas la copie a la carpeta /lib.
En mi programa tengo definida la variable:
 
  PyAfipWs: TLibHandle = dynlibs.NilHandle;

y utilizo el sgte codigo para cargarla:
 
  PyAfipWs := LoadLibrary('libpyafipws.so');

  if PyAfipWs = dynlibs.NilHandle then
    showmessage('La libreria "libpyafipws.so" no se cargo correctamente.');

Obviamente recibo el mensaje que no se cargo la libreria.
Utilizo Lazarus 2.0.4. Probe en Debian y Ubuntu sin exito.
Aclaro que utilizo el mismo codigo para cargar otra libreria y la carga correctamente, por eso creo que estoy haciendo algo mal al compilarla.
Cualquier ayuda será bienvenida.
Saludos
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 23, 2021, 06:20:12 pm
Hola!

¿Intentaste con la ruta completa del archivo?

Code: Pascal  [Select][+][-]
  1. PyAfipWs := LoadLibrary('/home/ruta_competa_del_archivo/libpyafipws.so');

Y ver si los métodos de la librería hemos sido exportados:

Code: Bash  [Select][+][-]
  1. nm -D libpyafipws.so
Title: Re: Problema con libreria dinamica
Post by: hexxa on June 23, 2021, 11:11:37 pm
Hola Fred, gracias por responder.
1 - Probe pasar la ruta completa donde se encuentra la librera y tampoco la carga.
2 - Pego la respuesta del comando "nm -D libpyafipws.so"
0000000000001637 T cstr
000000000000169f T format_ex
                 U fprintf
                 U free
                 U malloc
                 U puts
00000000000019c9 T PYAFIPWS_CreateObject
0000000000001b00 T PYAFIPWS_DestroyObject
0000000000001c6b T PYAFIPWS_Free
0000000000001b46 T PYAFIPWS_Get
0000000000001bd0 T PYAFIPWS_Set
                 U PyCallable_Check
                 U PyClass_Type
                 U PyDict_New
                 U PyDict_SetItemString
                 U PyErr_Fetch
                 U PyErr_NormalizeException
                 U PyErr_Print
                 U PyEval_GetBuiltins
                 U Py_Finalize
                 U Py_GetPath
                 U PyImport_Import
                 U Py_Initialize
                 U PyObject_CallObject
                 U PyObject_GetAttrString
                 U PyObject_SetAttrString
                 U PyObject_Str
                 U PyOS_snprintf
                 U PyRun_SimpleStringFlags
                 U PyRun_StringFlags
                 U PyString_AsString
                 U PyString_FromString
                 U PyString_Size
                 U __stack_chk_fail
                 U stderr
                 U strlen
                 U strncpy
0000000000001477 T test
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 24, 2021, 11:12:04 am
Quote
2 - Pego la respuesta del comando "nm -D libpyafipws.so"

Hum, el resultado parece correcto.

¿Estás seguro de que la librería tiene los mismos bits que el programa?

Si la librería se compiló en 64 bits, el programa también debe estar en 64 bits (o con 32 bits es igual).

Para comprobar los bits de la librería:
Code: Bash  [Select][+][-]
  1. file libpyafipws.so
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 24, 2021, 11:41:35 am
Re-hola.

Parece que la libreria es para aplicaciones "Python":

Code: Pascal  [Select][+][-]
  1. #include <Python.h>
  2. ...
  3. /* Start-up the python interpreter */

No sé si esto funcionará para una aplicación nativa compilada con fpc.
Title: Re: Problema con libreria dinamica
Post by: hexxa on June 24, 2021, 02:42:12 pm
La libreria la compilo en la misma pc donde despues trato de usarla. Probe en 2 pc, tanto en 32 como 64 bits.

Quizas sea como decis y solo sirva para ser utilizarla en aplicaciones Python.
Title: Re: Problema con libreria dinamica
Post by: hexxa on June 28, 2021, 12:54:15 pm
Por lo que entiendo de lo que dice el desarrollador de la librerìa se puede utilizar desde diferentes lenguajes, no necesariamente Python.
Dejo el link: http://www.sistemasagiles.com.ar/trac/wiki/LibPyAfipWs
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 28, 2021, 03:11:55 pm
Buenos dias.

¿Puedes incluir la libreria aquí como archivo adjunto?
Title: Re: Problema con libreria dinamica
Post by: hexxa on June 29, 2021, 05:22:33 pm
Buen día, dejo el link con la libreria compilada.

https://drive.google.com/file/d/1zYZ7p2zxHhUu4zlMqcC6-SbjlpNDCxfQ/view?usp=sharing
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 29, 2021, 06:15:11 pm
Buen día, dejo el link con la libreria compilada.

https://drive.google.com/file/d/1zYZ7p2zxHhUu4zlMqcC6-SbjlpNDCxfQ/view?usp=sharing

De hecho si hay problemas, con esto:

Code: Pascal  [Select][+][-]
  1. program dynlyb_test;
  2.  
  3. uses
  4. sysutils,dynlibs;
  5.  
  6. begin
  7. writeln(inttostr(loadlibrary('/home/fred/libpafipws.so')));
  8. end.

entiendo esto;

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ./dynlib_test
  2.  
  3. 0

Y y tambien con
Code: Pascal  [Select][+][-]
  1. safeloadlibrary('/home/fred/libpyafipws.so')

Lo siento pero no entiendo por qué.

 :-\
Title: Re: Problema con libreria dinamica
Post by: Fred vS on June 29, 2021, 06:36:48 pm
Re- Hola

Creo que el problema está en la libreria compilada con "static link".

Loadlibrary() solo funciona con librerias dinámicas.
Aquí está el resultado de lld de libreria con enlace dinámico:

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ldd /home/fred/LibMpg123-64.so
  2.          linux-vdso.so.1 (0x00007ffc7abfa000)
  3.         libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb56f315000)
  4.         libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb56f310000)
  5.         libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb56f14f000)
  6.         /lib64/ld-linux-x86-64.so.2 (0x00007fb56f722000)
  7.  

Y aquí está el resultado de lld de llibpyafipws.so static:

Code: Bash  [Select][+][-]
  1. fred@fiens ~> ldd /home/fred/libpyafipws.so
  2.         statically linked

Tal vez podrías volver a compilar la libreria con dynamic link.

[EDIT] Tal vez compilar la libreria con:
Code: Pascal  [Select][+][-]
  1. -DDLL_EXPORTS
Title: Re: Problema con libreria dinamica
Post by: hexxa on July 02, 2021, 01:40:00 pm
Buen día, el resultado que obtengo con ldd es el sgte:

Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         no es un ejecutable dinámico
Title: Re: Problema con libreria dinamica
Post by: Fred vS on July 02, 2021, 01:50:17 pm
Buen día, el resultado que obtengo con ldd es el sgte:

Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         no es un ejecutable dinámico

Entonces hay un problema en la libreria.

¿Ha intentado compilarlo con esto:?

Code: Bash  [Select][+][-]
  1.   gcc -c libpyafipws.c -o libpyafipws.o -fPIC -shared -DDLL_EXPORTS
Title: Re: Problema con libreria dinamica
Post by: hexxa on July 06, 2021, 01:19:46 pm
Buenas, sigue sin poder cargar la libreria, al compilar con
Code: Bash  [Select][+][-]
  1.  gcc -c libpyafipws.c -o libpyafipws.o -fPIC -shared -DDLL_EXPORTS
  2. ld -o libpyafipws.so libpyafipws.o -shared -fPIC
  3.  
Obtengo
Code: Bash  [Select][+][-]
  1. ldd /lib/libpyafipws.so
  2.         statically linked
Title: Re: Problema con libreria dinamica
Post by: Fred vS on July 06, 2021, 02:22:58 pm
Hola.

No lo sé, lo siento, tal vez deberías preguntarle al creador de la libreria o al foro de gcc.
Title: Re: Problema con libreria dinamica
Post by: Leledumbo on July 07, 2021, 02:24:11 pm
This is how you debug a LoadLibrary that returns NilHandle:
Code: Pascal  [Select][+][-]
  1. uses
  2.   dynlibs;
  3. var
  4.   l: THandle;
  5. begin
  6.   l := LoadLibrary('./libpyafipws.so');
  7.   if l = NilHandle then
  8.     WriteLn(GetLoadErrorStr)
  9.   else
  10.     UnloadLibrary(l);
  11. end.
  12.  
which in your provided binary, displays:
Quote
./libpyafipws.so: undefined symbol: PyClass_Type
Googling around, it seems that PyClass_Type is only known by Python 2, not Python 3, which is logical because Python 3 is the default Python version on my Linux installation.
Title: Re: Problema con libreria dinamica
Post by: hexxa on July 14, 2021, 10:46:34 pm
Gracias Fred por tu predisposicion.

Saludos
Title: Re: Problema con libreria dinamica
Post by: hexxa on July 18, 2021, 02:20:46 am
Gracias Leledumbo, yo tengo instalado Python 2.7.18. Estuve googleando y no encuentro una soluciòn, alguna idea?
Title: Re: Problema con libreria dinamica
Post by: Fred vS on July 18, 2021, 03:19:24 am
En mi sistema PyClass_Type está en libboost_python27 y que está aquí :

/usr/lib/x86_64-linux-gnu/libboost_python27.so.1.67.0

Code: Bash  [Select][+][-]
  1. fred@fiens ~> nm -D /usr/lib/x86_64-linux-gnu/libboost_python27.so.1.67.0 | grep PyClass_Type
  2.  
  3.                      U PyClass_Type  // result OK

Es posible que deba crear un enlace simbólico: libboost_python27.so con libboost_python27.so.1.67.0

[EDIT]

Puede ser instalando el paquete "deb" :

Code: Bash  [Select][+][-]
  1. sudo apt-get install libboost-python-dev
Title: Re: Problema con libreria dinamica
Post by: Fred vS on July 19, 2021, 02:56:17 am
¡El último!

¡Lo tengo!

Con las fuentes https://github.com/reingart/pyafipws/tree/master/src

Compilé como este:

Code: Bash  [Select][+][-]
  1. gcc -c -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -I/usr/include/boost/python libpyafipws.c -o libpyafipws.o -fPIC -shared

Code: Bash  [Select][+][-]
  1. ld -lboost_python27 -lpython2.7 -o libpyafipws.so libpyafipws.o -shared -fPIC

Y funciona con loadlibrary().

Adjunto el zip de la librería para Linux 64 bit.

Fre;D
Title: Re: Problema con libreria dinamica
Post by: hexxa on July 21, 2021, 12:45:17 pm
Hola Fred Vs, gracias por tu ayuda, logre compilar la libreria y que la cargue sin errores aunque no estoy seguro de haber hecho lo correcto.
Lo primero que hice fue instalar libboost-python-dev ya que no lo tenia, pero me instalo la version 3.8.
Para que compile sin errores hice lo sgte:
Code: Bash  [Select][+][-]
  1.  gcc -c -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -I/usr/include/boost/python libpyafipws.c -o libpyafipws.o -fPIC -shared
Code: Bash  [Select][+][-]
  1.  ld -lboost_python38 -lpython3.8 -lpython2.7 -o libpyafipws.so libpyafipws.o -shared -fPIC

Espero sea correcto, voy a empezar con las pruebas de uso de la librerìa.
Gracias nuevamente, me has dado una mano enorme!!
Saludos
Title: Re: Problema con libreria dinamica
Post by: Fred vS on July 21, 2021, 02:30:29 pm
Hola Fred Vs, gracias por tu ayuda, logre compilar la libreria y que la cargue sin errores aunque no estoy seguro de haber hecho lo correcto.
Lo primero que hice fue instalar libboost-python-dev ya que no lo tenia, pero me instalo la version 3.8.
Para que compile sin errores hice lo sgte:
Code: Bash  [Select][+][-]
  1.  gcc -c -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 -I/usr/include/boost/python libpyafipws.c -o libpyafipws.o -fPIC -shared
Code: Bash  [Select][+][-]
  1.  ld -lboost_python38 -lpython3.8 -lpython2.7 -o libpyafipws.so libpyafipws.o -shared -fPIC

Espero sea correcto, voy a empezar con las pruebas de uso de la librerìa.
Gracias nuevamente, me has dado una mano enorme!!
Saludos

Hola!

¿Estás seguro de que no tienes libboost_python27?

Aqui:

Code: ASM  [Select][+][-]
  1. fred@fiens ~> locate libboost_python27
  2. /usr/lib/x86_64-linux-gnu/libboost_python27.a
  3. /usr/lib/x86_64-linux-gnu/libboost_python27.so
  4. /usr/lib/x86_64-linux-gnu/libboost_python27.so.1.67.0

Pero si funciona con libboost_python38, por qué no.

Atención, me parece que la liberia se usa STDCALL para Linux (normalmente usamos CDECL para Linux).
Entonces tendrás que usar para "external" stdcall.

Fre;D
Title: Re: Problema con libreria dinamica
Post by: hexxa on August 05, 2021, 12:31:18 pm
Hola Fred vS, perdón por la demora en responder, recien puedo retomar este tema, efectivamente no tengo instalado libboost_python27.

Code: Bash  [Select][+][-]
  1. gustavo@gustavo-NB:~$ locate libboost_python
  2. /usr/lib/x86_64-linux-gnu/libboost_python38.a
  3. /usr/lib/x86_64-linux-gnu/libboost_python38.so
  4. /usr/lib/x86_64-linux-gnu/libboost_python38.so.1.71.0
  5. /usr/lib/x86_64-linux-gnu/cmake/boost_python-1.71.0/libboost_python-variant-shared-py3.8.cmake
  6. /usr/lib/x86_64-linux-gnu/cmake/boost_python-1.71.0/libboost_python-variant-static-py3.8.cmake
  7.  

El problema que tengo ahora es que al llamar a una funcion de la libreria me arroja una excepción de la clase 'External: SIGSEGV'.

Tengo definidas estas variables
Code: Pascal  [Select][+][-]
  1. type
  2.   TWSAA_CreateTRA = function (service: string; ttl: longint): string; stdcall;
  3.   TWSAA_SignTRA = function (tra: string; cert: string; pk: string): string; stdcall;
  4.   TWSAA_LoginCMS = function (tra: string): string; stdcall;
  5.  
  6. var
  7.   WSAA_CreateTRA : TWSAA_CreateTRA;
  8.   WSAA_SignTRA : TWSAA_SignTRA;
  9.   WSAA_LoginCMS : TWSAA_LoginCMS;
  10.  

y este codigo

Code: Pascal  [Select][+][-]
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3.   ttl: longint;
  4. begin
  5.   PyAfipWs := LoadLibrary('./libpyafipws.so');
  6.  
  7.   if PyAfipWs = dynlibs.NilHandle then
  8.   begin
  9.     showmessage(GetLoadErrorStr);
  10.     exit
  11.   end;
  12.  
  13. // Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1
  14.   ttl:= 36000; //tiempo de vida = 10hs hasta expiración
  15.   tra:= WSAA_CreateTRA('WSFEv1', ttl);
  16.  
  17. // Especificar la ubicacion de los archivos certificado y clave privada
  18.   Path:= '/home/gusavo/';
  19.  
  20. // Certificado: certificado es el firmado por la AFIP
  21. // ClavePrivada: la clave privada usada para crear el certificado
  22.   Certificado:= 'PRUEBA.crt'; // certificado de prueba
  23.   ClavePrivada:= 'MiClavePrivada.key'; // clave privada de prueba
  24.  
  25. // Generar el mensaje firmado (CMS)
  26.   cms:= WSAA_SignTRA(tra, Path + Certificado, Path + ClavePrivada);
  27.   showmessage(cms);
  28.  
  29. // Llamar al webservice de autenticación:
  30.   ta:= WSAA_LoginCMS(cms);
  31.  
  32. // Imprimir el ticket de acceso, ToKen y Sign de autorización
  33.   showmessage(ta);
  34. end;
  35.  

El error lo obtengo en la llamada a la funcion "WSAA_CreateTRA('WSFEv1', ttl)".
No se si hay algun error en el procedimiento de compilacion de la libreria o estoy haciendo algo mal en la llamada a la funcion.
Intente probar con la libreria que tu compilaste pero me da un error al tratar de cargarla, por eso opte por compilarla yo.
 
Saludos
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 05, 2021, 01:38:54 pm
El problema que tengo ahora es que al llamar a una funcion de la libreria me arroja una excepción de la clase 'External: SIGSEGV'.

Tengo definidas estas variables
Code: Pascal  [Select][+][-]
  1. type
  2.   TWSAA_CreateTRA = function (service: string; ttl: longint): string; stdcall;
  3.   TWSAA_SignTRA = function (tra: string; cert: string; pk: string): string; stdcall;
  4.   TWSAA_LoginCMS = function (tra: string): string; stdcall;
  5.  
  6. var
  7.   WSAA_CreateTRA : TWSAA_CreateTRA;
  8.   WSAA_SignTRA : TWSAA_SignTRA;
  9.   WSAA_LoginCMS : TWSAA_LoginCMS;
  10.  


Buenos dias.

¿O encontraste estas funciones?

Solo entiendo esto:

Code: Pascal  [Select][+][-]
  1. fred@fiens ~> nm -D libpyafipws.so
  2. 000000000000143b T cstr
  3. 000000000000149f T format_ex
  4.                  U fprintf
  5.                  U free
  6.                  U malloc
  7.                  U puts
  8. 000000000000174e T PYAFIPWS_CreateObject
  9. 0000000000001881 T PYAFIPWS_DestroyObject
  10. 00000000000019e0 T PYAFIPWS_Free
  11. 00000000000018c3 T PYAFIPWS_Get
  12. 0000000000001949 T PYAFIPWS_Set
  13.                  U PyCallable_Check
  14.                  U PyClass_Type
  15.                  U PyDict_New
  16.                  U PyDict_SetItemString
  17.                  U PyErr_Fetch
  18.                  U PyErr_NormalizeException
  19.                  U PyErr_Print
  20.                  U PyEval_GetBuiltins
  21.                  U Py_Finalize
  22.                  U Py_GetPath
  23.                  U PyImport_Import
  24.                  U Py_Initialize
  25.                  U PyObject_CallObject
  26.                  U PyObject_GetAttrString
  27.                  U PyObject_SetAttrString
  28.                  U PyObject_Str
  29.                  U PyOS_snprintf
  30.                  U PyRun_SimpleStringFlags
  31.                  U PyRun_StringFlags
  32.                  U PyString_AsString
  33.                  U PyString_FromString
  34.                  U PyString_Size
  35.                  U stderr
  36.                  U strlen
  37.                  U strncpy
  38. 000000000000127f T test

Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 06, 2021, 12:26:21 am

El error lo obtengo en la llamada a la funcion "WSAA_CreateTRA('WSFEv1', ttl)".
No se si hay algun error en el procedimiento de compilacion de la libreria o estoy haciendo algo mal en la llamada a la funcion.
Intente probar con la libreria que tu compilaste pero me da un error al tratar de cargarla, por eso opte por compilarla yo.
 
Saludos

En caso de que encuentre las funciones con:
(Aquí no los veo)

Code: Bash  [Select][+][-]
  1. nm -D libpyafipws.so

Puedes probar con esto:

 
Code: Pascal  [Select][+][-]
  1.   var
  2.       WSAA_CreateTRA : function (service: string; ttl: longint): string; stdcall;
  3.       WSAA_SignTRA : function (tra: string; cert: string; pk: string): string; stdcall;
  4.       WSAA_LoginCMS : function (tra: string): string; stdcall;
  5.      
  6.  ...
  7.  
  8. procedure TForm1.FormCreate(Sender: TObject);
  9. var
  10.   ttl: longint;
  11. begin
  12.   PyAfipWs := LoadLibrary('./libpyafipws.so');
  13.  
  14.   if PyAfipWs = dynlibs.NilHandle then
  15.   begin
  16.     showmessage(GetLoadErrorStr);
  17.     exit
  18.   end;
  19.  
  20.   // AQUI!
  21. Pointer(WSAA_CreateTRA):=DynLibs.GetProcedureAddress(PyAfipWs,PChar('WSAA_CreateTRA'));
  22.  
  23. if WSAA_CreateTRA <> nil then
  24.  
  25.   begin
  26.    
  27. // Generar un Ticket de Requerimiento de Acceso (TRA) para WSFEv1
  28.   ttl:= 36000; //tiempo de vida = 10hs hasta expiración
  29.   tra:= WSAA_CreateTRA('WSFEv1', ttl);
  30.  
  31. end else showmessage('WSAA_CreateTRA = nil');

Pero sigo pensando que para Unix es mejor usar cdecl.
Entonces, en el código de la libreria, libpyafipws.h + ibpyafipws.c, reemplace todo el stdcall con cdecl y luego vuelva a compilar. Y use cdecl en código Pascal también.

Fre;D
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 06, 2021, 01:36:32 am
El error lo obtengo en la llamada a la funcion "WSAA_CreateTRA('WSFEv1', ttl)".
No se si hay algun error en el procedimiento de compilacion de la libreria o estoy haciendo algo mal en la llamada a la funcion.
Intente probar con la libreria que tu compilaste pero me da un error al tratar de cargarla, por eso opte por compilarla yo.
 
Saludos

Creo que lo tengo.
(Mamá mia, que aventura!)

También debemos compilar wsaa.c, wsfev1.c y linkar a la libreria.

Code: Bash  [Select][+][-]
  1. gcc -c -I/usr/include/python2.7 -I/usr/include/boost/python -lboost_python37 -lpython3.7 wsaa.c -o wsaa.o -fPIC -shared
  2.  
  3. gcc -c -I/usr/include/python2.7 -I/usr/include/boost/python -lboost_python37 -lpython3.7 wsfev1.c -o wsfev1.o -fPIC -shared


Code: Bash  [Select][+][-]
  1. ld -lboost_python27 -lpython2.7 -o libpyafipws.so libpyafipws.o wsaa.o wsfev1.o -shared -fPIC

En este caso aparecen las funciones:

Code: Pascal  [Select][+][-]
  1. fred@fiens ~/D/p/src> nm -D libpyafipws.so
  2.                  U atol
  3. 00000000000014bb T cstr
  4. 000000000000151f T format_ex
  5.                  U fprintf
  6.                  U free
  7.                  U malloc
  8.                  U puts
  9. 00000000000017ce T PYAFIPWS_CreateObject
  10. 0000000000001901 T PYAFIPWS_DestroyObject
  11. 0000000000001a60 T PYAFIPWS_Free
  12. 0000000000001943 T PYAFIPWS_Get
  13. 00000000000019c9 T PYAFIPWS_Set
  14.                  U PyCallable_Check
  15.                  U PyClass_Type
  16.                  U PyDict_New
  17.                  U PyDict_SetItemString
  18.                  U PyErr_Fetch
  19.                  U PyErr_NormalizeException
  20.                  U PyErr_Occurred
  21.                  U PyErr_Print
  22.                  U PyEval_GetBuiltins
  23.                  U Py_Finalize
  24.                  U Py_GetPath
  25.                  U PyImport_Import
  26.                  U Py_Initialize
  27.                  U PyInt_FromLong
  28.                  U PyObject_CallMethod
  29.                  U PyObject_CallObject
  30.                  U PyObject_GetAttrString
  31.                  U PyObject_IsTrue
  32.                  U PyObject_SetAttrString
  33.                  U PyObject_Str
  34.                  U PyOS_snprintf
  35.                  U PyRun_SimpleStringFlags
  36.                  U PyRun_StringFlags
  37.                  U PyString_AsString
  38.                  U PyString_FromString
  39.                  U PyString_Size
  40.                  U PySys_SetArgv
  41.                  U PyTuple_New
  42.                  U PyTuple_SetItem
  43.                  U stderr
  44.                  U strlen
  45.                  U strncpy
  46. 00000000000012ff T test
  47. 0000000000001a82 T WSAA_CreateTRA
  48. 00000000000022ae T WSAA_LoginCMS
  49. 0000000000001ef3 T WSAA_SignTRA
  50. 000000000000273b T WSFEv1_CompUltimoAutorizado
  51. 0000000000002550 T WSFEv1_Conectar
  52. 000000000000260a T WSFEv1_Dummy
  53. 000000000000269d T WSFEv1_SetTicketAcceso


Incluya la libreria compilada usando CDECL en lugar de STDCALL.
Creo que es posible que deba instalar python 2.7.
Vea mi publicación anterior sobre cómo usar las funciones.
Si usa la libreria-archivo adjunto, use esto para las variables de Pascal:

Code: Pascal  [Select][+][-]
  1. var
  2.       WSAA_CreateTRA : function (service: string; ttl: longint): string; CDECL;
  3.       WSAA_SignTRA : function (tra: string; cert: string; pk: string): string; CDECL;
  4.       WSAA_LoginCMS : function (tra: string): string; CDECL;

Fre;D

PS: ¿Para qué es esta librería?
Title: Re: Problema con libreria dinamica
Post by: GAN on August 06, 2021, 04:34:19 am
Quote

PS: ¿Para qué es esta librería?

Es para comunicarse con los servidores de la AFIP (Argentina's "IRS"), una API para, por ejemplo, poder emitir una factura electrónica o digital (electronic invoicing).

Saludos.
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 06, 2021, 04:46:49 am
Quote

PS: ¿Para qué es esta librería?

Es para comunicarse con los servidores de la AFIP (Argentina's "IRS"), una API para, por ejemplo, poder emitir una factura electrónica o digital (electronic invoicing).

Saludos.

Ha, OK, gracias.

No conozco bien Python pero me parece que Python 2.7 está obsoleto y que deberíamos reescribir todas las fuentes para Python 3.
Traté de usar la libreria pero hay muchos errores al conectarse a los módulos de Python (pyc) como:

Quote
WSAA_CreateTRA: Failed to load module: exceptions.ImportError: /usr/lib/python2.7/lib-dynload/_ssl.x86_64-linux-gnu.so: undefined symbol: _Py_ZeroStruct - File wsaa.py, line 26, in <module>LibPyAfipWs

 :-[

[EDIT] También el código de wsaa.py es "Windows Only".

Code: [Select]
 
...
   import win32com.server.register
   win32com.server.register.UseCommandLine(WSAA)
...


Tengo serias dudas de que esta librería ya haya funcionado en Linux con las fuentes originales.

Fre;D
Title: Re: Problema con libreria dinamica
Post by: GAN on August 06, 2021, 06:08:15 am
Quote
Tengo serias dudas de que esta librería ya haya funcionado en Linux con las fuentes originales.

Fre;D

En realidad esa librería es open source pero se vende compilada para usar en Delphi, lo sé porque participo de un foro de Delphi en español y ahí en su momento se habló bastante de esa librería, es más, por lo que recuerdo haber leído, todos los programadores que la necesitaron, pues, la compraron...

Saludos.
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 06, 2021, 06:31:41 am
Quote
Tengo serias dudas de que esta librería ya haya funcionado en Linux con las fuentes originales.

Fre;D

En realidad esa librería es open source pero se vende compilada para usar en Delphi, lo sé porque participo de un foro de Delphi en español y ahí en su momento se habló bastante de esa librería, es más, por lo que recuerdo haber leído, todos los programadores que la necesitaron, pues, la compraron...

Saludos.

Hum, la creación de la C biblioteca parece funcionar.
Loadlib y GetProcedureAddress functiona.

El problema está en los módulos de Python.
Todo fue escrito en Python27 y existen algunas incompatibilidades con Python3.

Estoy atascado con este error:

Code: Pascal  [Select][+][-]
  1.  undefined symbol: _Py_ZeroStruct

Me temo que se necesita la ayuda de un gurú de Python.

Fre;D

Title: Re: Problema con libreria dinamica
Post by: GAN on August 06, 2021, 07:47:34 am
Dejo un link (hay varios) del foro DelphiAccess con información sobre el tema:
http://delphiaccess.com/foros/index.php/topic/11423-factura-electrónica-para-argentina/?p=90129 (http://delphiaccess.com/foros/index.php/topic/11423-factura-electrónica-para-argentina/?p=90129)

Link de la guía de instalción:
https://github.com/reingart/pyafipws/wiki/InstalacionCodigoFuente

Link de la web oficial y sus costos:
https://www.sistemasagiles.com.ar/trac/wiki/PyAfipWs#CostosyCondiciones
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 06, 2021, 10:12:37 am
Link de la web oficial y sus costos:
https://www.sistemasagiles.com.ar/trac/wiki/PyAfipWs#CostosyCondiciones

Vaya:
Quote
Consultas por temas menores (certificados WSAA, constatación WSCDC, padrón contribuyentes RG1817, almacenamiento RG1361, código barras, envío emails, etc.) :    hasta 1hs    $4200

Con la sorpresa para Linux:
Quote
Para LINUX se adiciona soporte Avanzado, consultar.

Entiendo ahora.  :-X

Fre;D
Title: Re: Problema con libreria dinamica
Post by: hexxa on August 11, 2021, 07:20:06 pm
Gracias Fred vS y GAN por sus aportes, vere si logro avanzar con ayuda oficial.

Saludos
Title: Re: Problema con libreria dinamica
Post by: Fred vS on August 11, 2021, 07:42:01 pm
Gracias Fred vS y GAN por sus aportes, vere si logro avanzar con ayuda oficial.

Saludos

Hola!

Creo que tienes todo para la librería.

Pero para la compilación de módulos de Python, lo siento pero no domino bien Python.

Fre;D
Title: Re: Problema con libreria dinamica
Post by: hexxa on August 11, 2021, 07:53:20 pm
No lo sientas, me has ayudado un monton!!!

 ;)
TinyPortal © 2005-2018