[Python] Importar Funciones de C++ a Modulo de Python

Iniciado por Di6it4Lj4ck4L, 25 Abril 2011, 00:39 AM

0 Miembros y 1 Visitante están viendo este tema.

Di6it4Lj4ck4L

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 (python) [Seleccionar]
cdef extern from "pytiodbc.cpp":
openconn(char *dsn, char *user, char *pwd)

def connect(dsn,user,pwd)
python son de tipo str
if not isinstance(dsn,unicode):
if not isinstance(dsn,str):
raise ValueError("'dsn' requires text input, got %s" % type(text))
udsn=dsn.encode('UTF-8')

if not isinstance(user,unicode):
if not isinstance(user,str):
raise ValueError("'user' requires text input, got %s" % type(text))
uuser=user.encode('UTF-8')

if not isinstance(pwd,unicode):
if not isinstance(pwd,str):
raise ValueError("'user' requires text input, got %s" % type(text))
upwd=pwd.encode('UTF-8')

#Llamamos a la función definida en pytiodbc.cpp
ret=openconn(udsn,uuser,upwd)


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 (cpp) [Seleccionar]
#include "tiodbc.hpp"
#include <iostream>

using namespace std;

bool openconn(char *dsn, char *user, char *pwd);

bool openconn(char *dsn, char *user, char *pwd){

// Crea la conexión al ODBC
   tiodbc::connection my_connection(dsn, user, pwd);

   // Verifica que la conexión sea éxitosa
   if (my_connection.connected())
       return true;
   else
       return false;

   // Se Desconecta
   my_connection.disconnect();
}


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

Código (python) [Seleccionar]

import sys
import os
import pytiodbc

print "Ejemplo conectar a Base de datos"
resp = pytiodbc.connect ("DSN=Test","Test","Test")
print resp
os.system("pause")




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.

lnvisible

¿Tienes un ejemplo de swig que funciona? Parte de un ejemplo y lo cambias.

Di6it4Lj4ck4L

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  ;)