matlab版本為:matlab7.11.0(R2010b)
vs2008
1.在matlab中生成dll
在m文件中實(shí)現(xiàn)如下功能:
獲得N個(gè)魔方矩陣的秩。m文件的內(nèi)容如下:
function r = mrank(n)
r = zeros(n,1);
for k=1:n
r(k) = rank(magic(k));
end
將上述內(nèi)容保存為:mrank.m
在matlab的command 窗口鍵入:
>> mcc -B csharedlib:mrank mrank.m %該命令將在后面做說(shuō)明
在matlab7.0中執(zhí)行上述命令后生成下面幾個(gè)文件:
mrank.exp mrank.exports mrank.h mrank.lib mrank.c mrank.dll
在vs2008中使用m文件的函數(shù)功能。
首先配置vs2008的環(huán)境
1.工具——> 選項(xiàng)——>項(xiàng)目和解決方案——>VC++目錄
(1) 選擇“可執(zhí)行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(注意:當(dāng)前的Mathlab安裝在C:\Program Files下面)
(2)選擇“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include
(3)選擇“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib
(4)選擇“庫(kù)文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft
上述環(huán)境只需要配置一次
對(duì)于每一個(gè)工程,做下面的設(shè)置
項(xiàng)目——>屬性——>連接器——>輸入
選擇:附加依賴(lài)項(xiàng):添加:
libmex.lib
libmx.lib
libmat.lib
mclmcrrt.lib
將mrank.h mrank.lib mrank.dll拷貝到當(dāng)前目錄下
cpp文件中中的內(nèi)容如下:
#include "stdafx.h"
#include<stdlib.h>
#include"matrix.h"
#include"mrank.h"
#include "mclmcrrt.h"
#pragma comment(lib,"mrank.lib")
int main()
{
mxArray *N(NULL),*R(NULL);
int n =12;
mrankInitialize();//初始化動(dòng)態(tài)鏈接庫(kù)
N = mxCreateDoubleScalar(n);//用n來(lái)初始化生成的數(shù)組,其實(shí)標(biāo)量就是一個(gè)1*1的數(shù)組
mlfMrank(1,&R,N);//執(zhí)行m文件的主要功能
size_t num = mxGetM(R);//R的行的個(gè)數(shù)
double *res = new double[num];
memset(res,0,sizeof(double)*num);
memcpy(res,mxGetPr(R),sizeof(double)*num);
for(int i=0;i<num;++i)
printf("%f\n",res[i]);
delete[] res;
mxDestroyArray(N);
mxDestroyArray(R);
mrankTerminate();//終止動(dòng)態(tài)數(shù)據(jù)連接
return 0;
}
上述cpp文件使用了Matlab編譯m文件生成的dll,在cpp中通過(guò)mxArray這個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)和dll中的方法進(jìn)行信息交換。
這樣就在cpp中調(diào)用了matlab中的m文件實(shí)現(xiàn)的方法。
mcc命令說(shuō)明:
http://www.cnblogs.com/juneja/archive/2008/10/31/1323423.html