Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo generar un componente com invocable en forma de dll en matlab

Cómo generar un componente com invocable en forma de dll en matlab

1. Generar 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);

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];

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]);

eliminar[] res

;

mxDestroyArray(N);

mxDestroyArray(R);

mrankTerminate(); //terminar la conexión de datos dinámica

return 0;

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.