c++ matlab dll shared-libraries loadlibrary

Cómo cargar un archivo c++ dll en Matlab



shared-libraries loadlibrary (3)

Como lo mencionaron otros, primero debe envolver su biblioteca de C ++ como una biblioteca de C: mathworks solía aconsejar no usar el código de C ++ directamente en mex (el núcleo de C ++ directamente es complicado), tal vez sigue siendo cierto.

Tu descripción tampoco está del todo clara: ¿a qué te refieres con "mex encuentra lo de Linux", pero eso no funciona? Decir que no funciona no es útil: los comandos exactos y el mensaje de error son.

Tengo un archivo dll de C ++ que usa muchas otras bibliotecas de c ++ (IPP, Opencv +++) que necesito cargar en matlab. ¿Cómo puedo hacer esto?

He intentado loadlibrary y mex. La biblioteca de carga no funciona.

El mex encuentra las cosas de Linux (biblioteca independiente de la plataforma) e intenta incluirlas. Y eso no funciona.

¿Alguien tiene alguna idea buena?


Podría elegir el enfoque de Java (ya que Matlab se ejecuta en un JRE y puede acceder a objetos / métodos de Java ; solo tenga en cuenta que el JRE de Matlab no está tan actualizado como el último JRE, el que estoy ejecutando usa Java 1.5) y usa JNA para acceder a tu DLL.

O bien, si escribió el archivo DLL de nivel superior, podría elegir el enfoque COM / ActiveX.

He tenido un buen éxito al diseñar la interfaz de mis funciones de C ++ como bibliotecas COM / ActiveX; no tiene que preocuparse por eso .h.

Consulte la guía Interfaces externas en clientes COM, especialmente la parte sobre administración / conversión de datos.

Sería trabajo adicional agregar la capa COM / ActiveX, pero haría que tu biblioteca fuera más portátil dentro del mundo de Windows y probablemente más fácil de utilizar en MATLAB.

Si tiene muchas llamadas de función a su DLL, el enfoque COM / ActiveX podría ser más rápido (no estoy seguro), pero de lo contrario, creo que el enfoque JNA sería más fácil.


loadlibrary debería funcionar. Lo uso todo el tiempo para llamar funciones de dlls escritas en C ++ con envoltorios de C.

¿Qué errores estás obteniendo cuando intentas usar loadlibrary?

Asegúrese de que las funciones exportadas de la dll son funciones C, no funciones C ++. De lo contrario, escriba C wrappers.

Más información sobre exactamente lo que está haciendo al usar loadlibrary sería útil.