Click here to Skip to main content
15,886,919 members
Articles / Desktop Programming / MFC
Article

Using MatLab Add-in for MS Visual Studio 6

Rate me:
Please Sign up or sign in to vote.
4.69/5 (22 votes)
4 Jul 2003CPOL3 min read 367.7K   3K   50   119
How to Use the MatLab Add-in for MSVC++ 6

Sample Image - MATLAB_ADD_IN.jpg

Introduction

Following the line of the article posted by A.Riazi, Solving engineering problem using MATLAB C API, I will show in this small example how to use M Functions inside our VC++ 6 project.

The project calculates the convolution of two vectors, and shows the resulting vector in the MsChart control. The function that performs the convolution is written in MatLab and then through the MatLab Add-in converted to C code ready to be used inside our app.

Requirements

You need Visual Studio 6 and MatLab Release 12 installed with the MatLab C Library and Matlab Compiler.

Installing the MatLab Add-in

The add-in automates the integration of M-files into Visual C++ projects. The add-in for Visual Studio is automatically installed on your system when you run either mbuild -setup or mex -setup and select Microsoft Visual C/C++ version 6. In order to use the add-in you must follow these steps:

  • Start MatLab, in the prompt type mbuild -setup
  • Follow the menus and choose MS Visual C++6.0.
  • Type the following commands in the matlab prompt :

    cd (prefdir)
    mccsavepath

These commands save the MatLab path to a file called mccpath in your user preferences directory (prefdir), ussually inside your documents and settings file. The path is used by the add-in because it runs outside Matlab and there is no other way for it to determine your Matlab path. If you add new directories to your Matlab path you will have to rerun this command if you want the add-in to see them.

  • Configure the Matlab Add-in for Visual Studio 6 to work within MSVisual C++.
    • Open MSVisualC++.
    • Select Tools -> Customize from the MSVC menu.
    • Click on the Add-ins and Macro Files tab.
    • Check MATLAB for Visual Studio on the Add-ins and Macro Files list and click Close.

The floating MATLAB add-in for Visual Studio toolbar appears. The checkmark directs MSVC to automatically load the add-in when you start MSVC again.

Calculating the convolution in Matlab

We will write a simple function in MatLab that will perform the convolution of two vectors:

In1 and In2 and store the result in out.

We actually can use any matlab built-in function or toolbox function inside our function here we use only the function conv for simplicity.

function out=MyFunc(In1,In2)
%Returns the convolution of vector IN1 and IN2
out=conv(In1,In2);

Save the function with the name MyFunc.m </FONT>

Writing the Application

Use the MFC AppWizard (exe) option to generate a Dialog Based Application and call it conv. Create a Button which will calculate the convolution of two given vectors.

Add the code below to the button's Message Handler.

//x1 and x2 are the input array to do the computation
//res will have the result, we already know that the length 
//of the convolution of 2 vectors is (length(x1)+length(x2)-1)=19
double x1[]={1,2,3,4,5,6,7,8,9,0};
double x2[]={4,5,6,7,4,5,8,9,0,7};
double res[19];

//create the arrays that will be passed to MyFunc
mxArray* In1;
mxArray* In2;
mxArray* Out;

//we make them Real and have 10 values
In1=mxCreateDoubleMatrix(1,10,mxREAL);
In2=mxCreateDoubleMatrix(1,10,mxREAL);

//this make In1=x1;In2=x2
memcpy(mxGetPr(In1),x1,10*sizeof(double));
memcpy(mxGetPr(In2),x2,10*sizeof(double));

//Call to MyFunc.m that return the convolution of In1 and In2
Out=mlfMyFunc(In1,In2);

//now we have the result(Out) in a double array 'res'
memcpy(res,mxGetPr(Out),19*sizeof(double));

//Destroy matrices
mxDestroyArray(Out);
mxDestroyArray(In1);
mxDestroyArray(In2);

Copy MyFunc.m into your VC++ project directory. Now go to the MatLab Add-in and click the .m++ (Add m-files to current project) button:

Sample screenshot

Select Windows Console Exe from the Combo Box and check Generate main file and debug mode. Press OK.

Then select the MyFunc.m file and click Open. After a while you will see new files added to your project.

Sample screenshot

Under MATLAB M-files you will see our MyFunc.m, you can even edit it from inside Visual C++. Under MATLAB C/C++ are MyFunc.c and MyFunc_main.c, generated by the MatLab Compiler. And all the headers needed by the compiler.

We can't build the app yet, we must add the following lines to convDlg.cpp:

#include "matlab.h"
#include "MyFunc.h"

Now the project should be built without any problem.   

Points of Interest

The steps described here don't include the MSChart part, you can see it from the source code, but you can see that the calculation is done by placing a  breakpoint inside the button message handler and checking the value of the res vector after the line:

memcpy(res,mxGetPr(Out),19*sizeof(double));

Well I hope this simple article be interesting for MatLab lovers, this is the first article I wrote, so I apologize if it is not clear enough. I will be glad to explain anything if you ask me. Greetings.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer Motorola
United States United States
Daniel Cespedes is now working on his final project to get the Electrical Engineering degree at the National University of Technology in Cordoba Argentina. He is developing a Computerized system for the study of Human Echolocation, the ability to detect obstacles with the echoes of self generated sounds.(yes like bats!!) at the CINTRA (Centro de Investigación y Transferencia Acústica).He uses MsVisual C++ 6 as a developing tool. He also work at the Software Research Lab at the University.
He comes from Sta.Cruz de la Sierra-Bolivia a paradise in SouthAmerica´s heart, where you can find pure air, nature contact, happy people, beautiful women etc.

Comments and Discussions

 
Generalthanks a lot, Pin
hi-linfeng6-Jul-03 22:51
hi-linfeng6-Jul-03 22:51 
QuestionI can compile,but can not built? Pin
david@seu17-Jun-03 15:17
david@seu17-Jun-03 15:17 
AnswerRe: I can compile,but can not built? Pin
Cambalindo18-Jun-03 4:08
Cambalindo18-Jun-03 4:08 
GeneralRe: I can compile,but can not built? Pin
david@seu18-Jun-03 15:24
david@seu18-Jun-03 15:24 
GeneralMatlab Add-in for a DLL Pin
Member 4251029-Jun-03 4:12
Member 4251029-Jun-03 4:12 
GeneralRe: Matlab Add-in for a DLL Pin
Cambalindo9-Jun-03 13:31
Cambalindo9-Jun-03 13:31 
GeneralRe: Matlab Add-in for a DLL Pin
Member 42510212-Jun-03 8:55
Member 42510212-Jun-03 8:55 
GeneralRe: Matlab Add-in for a DLL Pin
Cambalindo12-Jun-03 14:29
Cambalindo12-Jun-03 14:29 
Well you have to select "Windows Console EXE" because the MFC regular Dll just wrap the call to mlfMYFunc. If you want send me your code to see what´s happening.
On the other hand you can use the "Shared M DLL" option to construct your Dll this way.
Open the VC++ IDE and select New project them "Matlab project wizard".
In step 1: select "Shared M Dll" in Visual Matlab application type and "no" in Use Handle Graphic option.
Then click Finish. Then Ok.
After that you´ll be prompted to choose the .m file(s) that will be part of your dll. Again when you select the file (conv.m in my example) many files are generated if you build the project you end up with a projectname.dll and a projectname.lib and a header myFunc.h files.
This files must be included in your client project's directory.
In your client´s cpp file where you call the function inside your dll for example mlfMyFunc you have to include the header (MyFunc.h).
Then in your client´s project you have to link with the matlab libraries and your library so select Alt-F7 and in the link tab in Object/Library Modules
add the following libraries from matlab:
libmmfile.lib libmatlb.lib libmx.lib libmat.lib sgl.lib libmwsglm.lib yourDll.lib
make sure your compiler can find this libraries adding its paths in the Directories tab in the Option of the tools menu.
the libraries are in C:\yourmatlabdirectory\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
and the include files:
C:\yourmatlabdirectory\EXTERN\INCLUDE
If you have problems please let me know this should work..
otherwise maybe you are using functions that can´t be compiled by the matlab compiler, examples of this functions are all sound related functions like wavread,wavwrite etc.
good luck
cheers!!!!



Daniel Cespedes
"Santa Cruz de la Sierra Paraiso Terrenal!"
daniel.cespedes@ieee.org
QuestionCan Not Compile Project Pin
Member 4251025-Jun-03 8:55
Member 4251025-Jun-03 8:55 
AnswerRe: Can Not Compile Project Pin
Cambalindo5-Jun-03 12:32
Cambalindo5-Jun-03 12:32 
GeneralRe: Can Not Compile Project Pin
Member 4251026-Jun-03 4:04
Member 4251026-Jun-03 4:04 
GeneralSolution Pin
Member 4251026-Jun-03 5:34
Member 4251026-Jun-03 5:34 
GeneralRe: Solution Pin
Cambalindo6-Jun-03 10:06
Cambalindo6-Jun-03 10:06 
GeneralNice work! Pin
Abbas_Riazi26-May-03 0:26
professionalAbbas_Riazi26-May-03 0:26 
GeneralRe: Nice work! Pin
Cambalindo27-May-03 11:19
Cambalindo27-May-03 11:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.