Cmex 实例

Visual Studio 2010 + MATLAB 2011a 中进行如下在实验(系统Windows 7 pro 64bit)

注:要求VS版本 < Matlab版本

>> mex -setup
 
Welcome to mex -setup.  This utility will help you set up 
a default compiler.  For a list of supported compilers, see 
http://www.mathworks.com/support/compilers/R2011a/win64.html
 
Please choose your compiler for building MEX-files:
 
Would you like mex to locate installed compilers [y]/n? y
 
Select a compiler:
[1] Microsoft Visual C++ 2010 in D:\Program Files (x86)\Microsoft Visual Studio 10.0
 
[0] None
 
Compiler: 1
 
Please verify your choices:
 
Compiler: Microsoft Visual C++ 2010 
Location: D:\Program Files (x86)\Microsoft Visual Studio 10.0
 
Are these correct [y]/n? y
 
***************************************************************************
  Warning: MEX-files generated using Microsoft Visual C++ 2010 require
           that Microsoft Visual Studio 2010 run-time libraries be 
           available on the computer they are run on.
           If you plan to redistribute your MEX-files to other MATLAB
           users, be sure that they have the run-time libraries.
***************************************************************************
 
Trying to update options file: C:\Users\zhang\AppData\Roaming\MathWorks\MATLAB\R2011a\mexopts.bat
From template:              D:\PROGRA~1\MATLAB\R2011a\bin\win64\mexopts\msvc100opts.bat
 
Done . . .
 
**************************************************************************
  Warning: The MATLAB C and Fortran API has changed to support MATLAB
           variables with more than 2^32-1 elements.  In the near future
           you will be required to update your code to utilize the new
           API. You can find more information about this at:
           http://www.mathworks.com/support/solutions/en/data/1-5C27B9/?solution=1-5C27B9
           Building with the -largeArrayDims option enables the new API.
**************************************************************************

addtiontest.c
 1 #include <mex.h>
2
3 double addtiontest(double x, double y);
4 double doublesize(double a, double b);
5
6 void mexFunction(int nlhs, mxArray *plhs[], int nrhs,const mxArray *prhs[])
7 {
8 double*a;
9 double b, c;
10
11 plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
12 a = mxGetPr(plhs[0]);
13 b =*(mxGetPr(prhs[0]));
14 c =*(mxGetPr(prhs[1]));
15 *a = addtiontest(b, c);
16 }
17
18 double addtiontest(double x, double y)
19 {
20 double z;
21 z = doublesize(x,y);
22 return z;
23 }
doublesize.c
1 double doublesize(double a, double b)
2 {
3 double c;
4 c =2*(a+b)+100;
5 return c;
6 }

>> mex addtiontest.c doublesize.c

生成文件:addtiontest.mexw64

>> f = addtiontest(1.2,2)

f =

  106.4000

原文地址:https://www.cnblogs.com/xfzhang/p/2162392.html