Cómo generar un componente com invocable en forma de dll en matlab
Ejecute la siguiente función en el archivo m:
Obtener los rangos de N matrices de cubos de Rubik. El contenido del archivo m es el siguiente:
función r = mrank(n)
r = zeros(n, 1);
for k= 1:n
r(k) = rango(magic(k));
end
Guarde lo anterior como: mrank.m
Tipo:
gt; gt; mcc -B csharedlib:mrank mrank mrank mrank.m Este comando se explicará a continuación
Después de ejecutar el comando anterior en matlab 7.0, se generará el siguiente archivo:
mrank.exp mrank.exports mrank.h mrank.lib mrank.c mrank.dll
Utilice la función función del archivo m en vs2008 .
Primero configure el entorno de vs2008
1.Tools-gt; Options-gt; Projects and Solutions-gt directorio
(1) Seleccione " Archivos ejecutables "en el cuadro desplegable, agregue: C:\Program Files\MATLAB\R2010b\bin\win32 (Nota: Mathlab está actualmente instalado en C:\Program Files)
(2) Seleccione "Incluir "Archivos" (Incluir archivos), agregue: C:\Program Files\MATLAB\R2010b\extern\include
(3) Seleccione el cuadro desplegable "Archivos de referencia", agregue: C :\Program Files\MATLAB\R2010b \extern\lib
(4) Seleccione el cuadro desplegable "Archivo de biblioteca" y agregue: C:\Program Files\MATLAB\R2010b\extern\lib\win32 \microsoft
El entorno anterior se configura solo una vez
Para cada proyecto, realice las siguientes configuraciones
Project-gt;Properties-gt;Connectors-gt;Properties -gt;Properties-gt;Properties-gt ;connector-gt;connector-gt;input
Seleccionar: Dependencias adicionales: Agregar:
libmex.lib
libmx.lib
libmat.lib
mclmcrrt.lib
Copiar mrank.h mrank.lib mrank.dll al directorio actual
El contenido del archivo cpp es el siguiente:
#include "stdafx.h"
#stdlib.hgt;
#include "matrix.h"
#include "mrank.h"
#include "mclmcrrt.h"
#pragma comentario(lib, " mrank.lib")
int main()
{
mxArray *N(NULL), *R(NULL); p>
int n =12;
p>mrankInitialize(); //inicializa la biblioteca de enlaces dinámicos
N = mxCreateDoubleScalar(n);
mlfMrank(1, amp; R, N); // ejecuta la función principal del archivo m
size_t num = mxGetM(R); //número de filas de R
doble *res = nuevo doble[núm]; p>
memset(res, 0, tamaño de (doble)*núm
memcpy(res, mxGetPr(R), tamaño de); (doble)*num);
for(int i=0; ilt; num; i)
printf("f\n", res[i]); p>
eliminar[] res
;
mxDestroyArray(N);
mxDestroyArray(R);
mrankTerminate(); //terminar la conexión de datos dinámica
return 0; p>
p>
}
El archivo cpp anterior utiliza el dll generado cuando Matlab compila el archivo m e intercambia información con los métodos en el dll a través de la estructura de datos mxArray en el cpp. .
De esta forma, el método implementado en el archivo m en Matlab se llamará en cpp.