Volver a la página principal
martes 11 febrero 2025
6

Cómo invocar clases de C++ desde una DLL en Python

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.

Métodos para invocar clases de una DLL en Python

1. Usando 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()

2. Usando 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++.

3. Usando 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

Ejemplos comunes de uso

  • Llamar funciones matemáticas de alto rendimiento en C++.
  • Usar librerías gráficas o de procesamiento de imágenes.
  • Acceder a hardware especializado con controladores C++.
Etiquetas:
cpp python
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer