Как я могу использовать Microsoft Visual C ++ 2010 для создания MEX-файлов с MATLAB 7.10 (R2010a)?

после вопросов:
Как настроить интерфейс LIBSVM Matlab?
Почему в моем Windows 7 «нет компилятора» при вводе mex -setup в r2010a?
Я столкнулся с ссылкой:
Как я могу использовать Microsoft Visual C ++ 2010 для создания MEX-файлов с 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)

1

Решение

Да, конечно.

Во-первых, вы должны добавить включают папка, ЛИЭС папка в VS включает & ЛИЭС.

Во-вторых, вы реализуете свой mex-файл через C ++, сначала вы должны включить файл mex.h в свой исходный код, а затем mexFunction должна быть предоставлена ​​в соответствии с правилом mex. Следующее:

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])

В-третьих, вы должны добавить библиотеки в Дополнительные зависимости, например, libmx.lib, libmat.lib, libmex.lib и т. д.

PS: Когда вы пытались реализовать проект Matlab Mex, вы должны создать проект DLL, используя VS, фактически, файл 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);
}
}

Если вам нужно, я могу поделиться с вами своим проектом.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]