Cómo vs2010mfc llama a matlab 2010 para generar dll para programación
Por lo general, utilizamos la programación Matlab al implementar algoritmos de procesamiento de imágenes porque tiene funciones de biblioteca ricas y es fácil de operar. Sin embargo, el lenguaje C/C++ se usa generalmente en proyectos de ingeniería. Será muy problemático si reescribimos completamente el código matlab en código C ++. ¡La mejor manera es usar la interfaz 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 hacerlo. instale los compiladores matlab 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". situación.
2. Ingrese mbuild -setup en la línea de comando
Las opciones aquí son similares a las anteriores, seleccione el entorno para confirmar.
3. Generar archivo dll
Un comando mcc -W cpplib:add -T link:lib add.m
El agregado anterior indica el archivo dll generado. nombre, el siguiente add.m, como su nombre lo indica, es el nombre del archivo .m. Después de la generación, habrá 8 archivos más. Los útiles son los archivos add.ctfadd.dll add.lib add.h4. Se dice que la nueva versión de Matlab no generará archivos .ctf.
2. El archivo dll generado al llamar a VC6.0
Para el archivo dll generado anteriormente, podemos usar la herramienta Depende de VC6.0 para ver el nombre de la función exportada. pero necesitamos llamar a la función exportar. La función debe conocer el tipo de retorno del parámetro formal de la función, etc. Aquí necesitamos usar el archivo .h, que contiene la declaración de la función exportada. A continuación se utilizan ejemplos para explicar cómo usarla. it:
1. agregar archivo.m
p>función [a,b]=add(x,y)
a=2*x+ y;
b=3*y;
end
Tenga en cuenta que la función agregar tiene dos valores de retorno. Puede adivinar cómo se maneja en C++;
2. archivo add.h
Intercepta una pieza clave de código de la siguiente manera:
extern void add(int nargout, mwArray& a, mwArray& b p>
, const mwArray& x, const mwArray& y);
De hecho, el retorno de la función se disfraza en los parámetros formales, seguido del número de parámetros de salida, parámetros de salida, y parámetros de entrada. PD: ¡Las reglas utilizadas por el dll de algoritmo definido por el usuario en el proyecto actual son similares a las de aquí!
3. Llame a archivos dll en C++
(1) Cree un nuevo proyecto vacío y coloque los cuatro archivos mencionados anteriormente en el directorio del proyecto;
( 2 ) El directorio incluido en el directorio VC++: el directorio de inclusión en matlab
Por ejemplo, el mío es E:\MATLAB7\extern\include
(3) El directorio de la biblioteca en VC++ directorio: dentro de matlab El directorio lib
E:\MATLAB7\extern\lib\win32\microsoft\msvc60 debe modificarse de acuerdo con la versión de VC++.
(4) Propiedades del proyecto-》Conexión-》Entrada-》Dependencias adicionales
Entrada: add.lib mclmcrrt.lib mclmcr.lib, se genera el primero.
O agregue el siguiente código al preprocesamiento
#pragma comment(lib, "mclmcrrt.lib")
#pragma comment(lib, "mclmcr.lib")
#pragma comentario(lib, "add.lib")
4. Código C++
#include
#include "add. h"
usando el espacio de nombres std;
int main()
{
if(!addInitialize())
{
cout<<"¡¡falló la inicialización!!!"< return -1; } mwArray a(1,1,mxDOUBLE_CLASS); mwArray b(1,1,mxDOUBLE_CLASS); a(1,1)=20; b(1,1)=30; mwArray x(1,1,mxDOUBLE_CLASS); mwArray y(1,1,mxDOUBLE_CLASS); //Número de parámetros de salida, parámetros de salida, parámetros de entrada. add(2,x,y,a,b); doble *i=nuevo doble; doble *j=nuevo doble; p> p> x.GetData(i,1); y.GetData(j,1); cout<<"x="< <*i<< " y="<<*j< getchar(); devuelve 0; } Nota: ¡addInitialize() es imprescindible!