Para utilizar clases de C++ dentro de una DLL en Python, es necesario emplear herramientas como ctypes, CFFI o Pybind11. La opción más recomendada para clases completas es Pybind11, ya que simplifica la interoperabilidad.
ctypes
(para funciones C y estructuras simples)
ctypes
permite cargar una DLL y llamar funciones C, pero no maneja clases C++ directamente. Se debe exponer la clase mediante una interfaz en C:
Ejemplo:
// mylib.cpp
#include <iostream>
extern "C" {
__declspec(dllexport) void say_hello() {
std::cout << "Hola desde la DLL C++" << std::endl;
}
}
Compilar a DLL y luego llamarla en Python:
import ctypes
mylib = ctypes.CDLL("mylib.dll")
mylib.say_hello()
CFFI
(si se genera un wrapper en C)
Con CFFI
, se puede definir una API en C que actúe como puente hacia la clase C++.
Pybind11
(para clases completas)
Pybind11
permite exponer clases C++ a Python sin necesidad de escribir una API en C.
Ejemplo:
#include <pybind11/pybind11.h>
class MiClase {
public:
MiClase(int valor) : dato(valor) {}
int get_dato() { return dato; }
private:
int dato;
};
PYBIND11_MODULE(mylib, m) {
pybind11::class_<MiClase>(m, "MiClase")
.def(pybind11::init<int>())
.def("get_dato", &MiClase::get_dato);
}
Compilar como módulo de Python y luego usarlo:
import mylib
obj = mylib.MiClase(10)
print(obj.get_dato()) # Output: 10
Jorge García
Fullstack developer