Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Di6it4Lj4ck4L en 25 Abril 2011, 00:39 am



Título: [Python] Importar Funciones de C++ a Modulo de Python
Publicado por: Di6it4Lj4ck4L en 25 Abril 2011, 00:39 am
Buenas Noches  ;D.

Saludos a todos  ;), he colocado este post, porque tengo un pequeño problema  :huh:, deseo importar unas funciones de C++ que he creado en mi archivo pytiodvc.cpp, el cual utiliza como header tiniodbc.hpp, e utilizado el swig y bueno nada, y despues me dirigí al Boost y bueno no entendí nada, he intendo halar la función desde un archivo python utilizando el siguiente código:

Código
  1. cdef extern from "pytiodbc.cpp":
  2. openconn(char *dsn, char *user, char *pwd)
  3.  
  4. def connect(dsn,user,pwd)
  5. python son de tipo str
  6. if not isinstance(dsn,unicode):
  7. if not isinstance(dsn,str):
  8. raise ValueError("'dsn' requires text input, got %s" % type(text))
  9. udsn=dsn.encode('UTF-8')
  10.  
  11. if not isinstance(user,unicode):
  12. if not isinstance(user,str):
  13. raise ValueError("'user' requires text input, got %s" % type(text))
  14. uuser=user.encode('UTF-8')
  15.  
  16. if not isinstance(pwd,unicode):
  17. if not isinstance(pwd,str):
  18. raise ValueError("'user' requires text input, got %s" % type(text))
  19. upwd=pwd.encode('UTF-8')
  20.  
  21. #Llamamos a la función definida en pytiodbc.cpp
  22. ret=openconn(udsn,uuser,upwd)
  23.  

el archivo pytiodbc.cpp que importo es uno realizado por mi para probar si podía llamar la funcion desde el C++, anexo el código.

Código
  1. #include "tiodbc.hpp"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. bool openconn(char *dsn, char *user, char *pwd);
  7.  
  8. bool openconn(char *dsn, char *user, char *pwd){
  9.  
  10. // Crea la conexión al ODBC
  11.    tiodbc::connection my_connection(dsn, user, pwd);
  12.  
  13.    // Verifica que la conexión sea éxitosa
  14.    if (my_connection.connected())
  15.        return true;
  16.    else
  17.        return false;
  18.  
  19.    // Se Desconecta
  20.    my_connection.disconnect();
  21. }

lo que deseo es poder llamar esa función desde Python  ;-), por ejemplo con un código así:

Código
  1. import sys
  2. import os
  3. import pytiodbc
  4.  
  5. print "Ejemplo conectar a Base de datos"
  6. resp = pytiodbc.connect ("DSN=Test","Test","Test")
  7. print resp
  8. os.system("pause")
  9.  
  10.  


Quisiera saber si esta manera es correcta ó por obligatoriedad tendría que útilizar el Swig ó Boost  :silbar:, espero su respuesta, y de antemano muchas gracias por la ayuda.


Título: Re: [Python] Importar Funciones de C++ a Modulo de Python
Publicado por: lnvisible en 2 Mayo 2011, 19:05 pm
¿Tienes un ejemplo de swig que funciona? Parte de un ejemplo y lo cambias.


Título: Re: [Python] Importar Funciones de C++ a Modulo de Python
Publicado por: Di6it4Lj4ck4L en 2 Mayo 2011, 19:08 pm
Mmm los ejemplo que he encontrado de Swig han sido de C, y bueno la verdad no me sirve porque la clase esta en C++, pero de todas formas intentare a ver si puedo hacer algo, gracias por la respuesta  ;)