I want to call MATLAB function in my C++ project.
I'm using Matlab R2010a and Visual Studio 2010
First I created a simple matlab function:
function y = foo(x)
y = x+1;
and then I used matlab compiler to compile this function using matlab GUI compiler (File-> new -> Deployment Project and then choose C++ shared Library). It produces this files 2 folders: distrib and src.
distrib contains:
src contains :
I want to use this file in a C++ application. I tried many times and I didn't find a way. All the ways I found over the internet are using old matlab compiler which produces different files or works on an old version of visual studio.
So please could anyone help me?
What must I do? What files/references must I add and to where? What paths must I define?
maybe it is too late but for the future.
Include foo.h
.
Add C/C++-General-Additional Include Directories the way to the matlab headers (C:\Program Files (x86)\MATLAB\R2009b\extern\include
).
Add foo.lib
, mclmcrrt.lib
and mclcommain.lib
for Linker in Additional Dependencies.
For linker in Additional Library Directories show the way to your matlab libs(C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft
for 32bit ver (matlab and VS versions should be the same. I had to install the second Matlab 32bit version.)).
I added the way to the foo.lib
in my system path.
Before using your library foo.dll
, you should initialize MCR and library function.
mclInitializeApplication(NULL,0);
fooInitialize();
After using don't forget:
mclTerminateApplication();
fooTerminate();
And some demonstration code, looks like:
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;