以下问题:
How to set up LIBSVM Matlab interface?
Why “No compiler” on my Windows 7 when typing mex -setup in r2010a?
我遇到了链接:
How can I use Microsoft Visual C++ 2010 to create MEX files with MATLAB 7.10 (R2010a)?
在页面中说,补丁将支持这些组合:
• Visual C++ 2010 Professional and 64-bit MATLAB 7.10 (R2010a)
• Visual C++ 2010 Professional and 32-bit MATLAB 7.10 (R2010a)
• Visual C++ 2010 Express (Windows SDK 7.1 also required) and 64-bit MATLAB 7.10 (R2010a)
• Visual C++ 2010 Express and 32-bit MATLAB 7.10 (R2010a)
但是我的笔记本上安装了Visual C++ 2010 Ultimate
。如何理解补丁是否支持此组合?
• Visual C++ 2010 Ultimate and 64-bit MATLAB 7.10 (R2010a)
答案 0 :(得分:2)
是的,当然。
首先,您应该将 include 文件夹, libs 文件夹添加到VS include&库。
其次,您通过C ++实现mex文件,首先应将mex.h文件包含在源代码中,然后必须根据mex规则提供mexFunction。如下:
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
第三,您应该将libs添加到附加依赖项中,例如libmx.lib,libmat.lib,libmex.lib等。
PS:当你试图实现一个matlab mex项目时,你应该用VS创建一个dll项目,实际上,mex文件(mexw32& mexw64)是一个特殊的dll文件。所以VS生成的文件是一个dll文件,如果你想让VS生成一个mex文件,你可以通过修改VS项目的配置项来改变文件名,或者只是在生成后重命名文件。
在这里,我只向您展示一些代码:
#include "Rectification.h"
#include "mex.h"
void mexFunction( int nlhs, mxArray *plhs[], int nrhs,
const mxArray *prhs[] )
{
if (nrhs != 4)
{
mexErrMsgTxt("You need input just 4 parameters!");
}
int m1 = mxGetM(prhs[0]);
int n1 = mxGetN(prhs[0]);
int m2 = mxGetM(prhs[1]);
int n2 = mxGetN(prhs[1]);
int m3 = mxGetM(prhs[2]);
int n3 = mxGetN(prhs[2]);
int m4 = mxGetM(prhs[3]);
int n4 = mxGetN(prhs[3]);
double* temp1 = mxGetPr(prhs[0]);
double* temp2 = mxGetPr(prhs[1]);
double* temp3 = mxGetPr(prhs[2]);
double* temp4 = mxGetPr(prhs[3]);
CMatrix size(m1, n1, temp1);
CMatrix inliers1(m2, n2, temp2);
CMatrix inliers2(m3, n3, temp3);
CMatrix fMatrix(m4, n4, temp4);
CMatrix h1, h2;
CalH(size, inliers1, inliers2, fMatrix, h1, h2);
int om1 = h1.GetmRows();
int on1 = h1.GetmCols();
plhs[0] = mxCreateDoubleMatrix(om1, on1, mxREAL);
double* outMat1 = mxGetPr(plhs[0]);
for (int i = 0; i < om1*on1; i++)
{
*(outMat1 + i) = *(h1.GetmData() + i);
}
int om2 = h2.GetmRows();
int on2 = h2.GetmCols();
plhs[1] = mxCreateDoubleMatrix(om2, on2, mxREAL);
double* outMat2 = mxGetPr(plhs[1]);
for (int i = 0; i < om2*on2; i++)
{
*(outMat2 + i) = *(h2.GetmData() + i);
}
}
如果您需要,我可以与您分享我的项目。