Red de conocimiento informático - Conocimiento de Internet de las cosas - ¿Cómo llamar al archivo dll generado por Matlab para programar?

¿Cómo llamar al archivo dll generado por Matlab para programar?

Por lo general, usamos Matlab para implementar algoritmos de procesamiento de imágenes porque Matlab tiene funciones de biblioteca ricas y es fácil de operar, pero en proyectos de ingeniería generalmente usamos C/C++. Si reescribimos completamente el código de Matlab en código C ++, será muy problemático. ¡La mejor manera es usar la interfaz entre matlab y C/C ++ para convertir el programa .m en un archivo dll!

1. Utilice matlab para convertir un archivo .m a dll

1. Ingrese mex -setup en la línea de comando

Se le preguntará si desea instalar matlab. Compile el compilador localmente y luego seleccione el tipo de compilador. Hay editores propios de Matlab y otros editores detectados, como "Microsoft Visual C/C++ versión 6.0 en E:\Program Files\Microsoft Visual Studio", dependiendo de su situación real. . elegir.

2. Escriba mbuild -setup en la línea de comando

Las opciones aquí son similares a las anteriores y seleccione el entorno que se determinará a su vez.

3. Generar archivo dll

un comando mcc -W cpplib:add -T link:lib add.m

add se coloca en el archivo dll generado. nombre El add.m delante y detrás es el nombre del archivo .m como su nombre lo indica. Habrá 8 archivos adicionales después de la generación, el más útil de los cuales es el archivo add.ctfadd.dll add.lib add.h4. Se dice que la nueva versión de Matlab no generará archivos .ctf.

2. Llame al archivo dll generado en VC6.0

En el archivo dll generado anteriormente, podemos usar la herramienta VC6.0 Depends para ver el nombre de la función exportada. pero para llamar a una función exportada, debemos conocer la forma, el tipo de retorno, etc. de la función. Aquí usamos el archivo .h, que contiene la declaración de la función exportada. El siguiente ejemplo ilustra el uso:

1. Agregue el archivo .h

2. Agregue el archivo .h

3. Agregue el archivo .h m

función [a, b]=añadir(x,y)

a=2*x+y;

b=3*y;

fin

Tenga en cuenta que la función agregar tiene dos valores de retorno, puede adivinar cómo manejarla en C ++;

2. h file

Intercepte uno de los códigos clave de la siguiente manera:

extern void add(int nargout, mwArray& a, mwArray& b

, const mwArray& x, const mwArray& y );

De hecho, el valor de retorno de la función está disfrazado de parámetros formales, seguido del número de parámetros de salida, parámetros de salida y parámetros de entrada.

PD: ¡El algoritmo dll definido por el usuario en un proyecto en el que estoy trabajando usa reglas similares a las de aquí!

3. C++ llama a archivos dll

(1) Cree un nuevo proyecto vacío y coloque los cuatro archivos anteriores en el directorio del proyecto;

(2) VC++ directorio Contiene un directorio bajo: matlab en el directorio de inclusión

Por ejemplo, el mío es E:\MATLAB7\extern\include

(3) El directorio lib bajo el directorio VC++: matlab directorio lib interno

E:\MATLAB7\extern\lib\win32\microsoft\msvc60, modificado según la versión VC++.

(4) Propiedades del proyecto-"Conexiones-"Entrada-"Dependencias adicionales

Entrada: add.lib mclmcrrt.lib mclmcr.lib, se ha generado el primero. O en avance Agregue el siguiente código durante el procesamiento

#pragma comment(lib, "mclmcrrt.lib")

#pragma comment(lib, "mclmcr.lib")

#pragma comentario(lib, "add.lib")

Código 4.C++

#include

#include "agregar .h"

usando el espacio de nombres std;

int main()

{

if(! addInitialize())

{

cout<< "¡Error de inicialización! !!" <

Devolución -1;

}

mwArray a(1,1,mxDOUBLE_CLASS);

mwArray b(1,1,mxDOUBLE_CLASS);

a(1,1)=20;

b(1,1)=30; x(1,1,mxDOUBLE_CLASS);

mwArray y(1,1,mxDOUBLE_CLASS);

Parámetros de salida, El número de parámetros de salida y parámetros de entrada

add(2,x,y,a,b);

double *i=new double;

doble *j=nuevo doble

x.GetData(i,1);

y.GetData(i,1);

y.GetData( j,1);