2011-06-21 22 views
14

Quiero llamar a la función MATLAB en mi proyecto C++.Cómo llamar a las funciones de Matlab desde C++

estoy usando Matlab R2010a y Visual Studio 2010

Primero creó una simple función de Matlab:

function y = foo(x) 
    y = x+1; 

y luego utiliza el compilador de MATLAB para compilar esta función usando el compilador GUI de MATLAB (Archivo- > nuevo -> Proyecto de implementación y luego elegir Biblioteca compartida de C++). Produce estos archivos 2 carpetas: distrib y src.

distrib contiene:

  1. foo.dll
  2. foo.h
  3. foo.lib

src contiene:

  1. foo.cpp
  2. foo .dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

Quiero utilizar este archivo en una aplicación de C++. Lo intenté muchas veces y no encontré la manera. Todas las formas que encontré a través de Internet están usando un viejo compilador de matlab que produce diferentes archivos o funciona en una versión anterior de Visual Studio.

Entonces, ¿alguien podría ayudarme?

¿Qué debo hacer? ¿Qué archivos/referencias debo agregar y a dónde? ¿Qué caminos debo definir?

Respuesta

3

Se requieren los archivos foo.h y foo.lib para compilar su aplicación. El archivo foo.dll deberá enviarse con la aplicación resultante, generalmente en el mismo directorio.

Si coloca el archivo foo.h en el mismo directorio que sus archivos fuente, no necesitará hacer nada especial al #include "foo.h". También puede agregar la ruta directa al foo.lib en las dependencias del vinculador externo.

Si desea almacenar estos archivos fuera de la carpeta del proyecto y/o volver a utilizar estos archivos en otras aplicaciones, puede leer en VC++ Directories, Projects and Solutions.

Editar: Probablemente también necesite agregar las bibliotecas de MATLAB a sus rutas de inclusión y de biblioteca. Consulte la solución de soporte de MathWorks Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?

+0

añadí única foo.h en los archivos de cabecera y creé una principal El archivo .cpp y yo incluimos foo.h y abro las propiedades del proyecto y voy al enlazador y agregué las dependencias adicionales foo.lib y cuando construyo el proyecto me da un error que no se puede abrir estos dos archivos de origen #include "mclmcrrt.h" #include "mclcppclass.h" se encuentra en foo.h ¿Podría ayudarme? –

11

quizás sea demasiado tarde pero para el futuro.

Incluir foo.h.

Agregar C/C++ - General-Incluir directorios adicionales el camino a los encabezados de matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

Añadir foo.lib, mclmcrrt.lib y mclcommain.lib para Enlazador en Dependencias adicionales.

Para enlazador en directorios de librerías adicionales mostrar el camino a sus bibliotecas de MATLAB (C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft de 32 bits Ver (VS MATLAB y versiones deben ser los mismos. He tenido que instalar la segunda versión de 32 bits de Matlab.)).

Agregué el camino al foo.lib en la ruta de mi sistema.

Antes de usar su biblioteca foo.dll, debe inicializar MCR y la función de biblioteca.

mclInitializeApplication(NULL,0); 
fooInitialize(); 

Después de usar no se olvide:

mclTerminateApplication(); 
fooTerminate(); 

Y algunos códigos de demostración, se ve como:

int num = 1; 
double numbrIn = 1.5; 
std::cout<<"now we have " << numbrIn << std::endl; 
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL); 
array_in.SetData(&numbrIn,num); 
mwArray array_out; 
foo(1, array_out, array_in); 
array_out.GetData(&numbrIn, num); 
std::cout<<"now we have " << numbrIn << std::endl; 
+1

¡El futuro te lo agradece! – Spencer

Cuestiones relacionadas