關于vs2008(2005)與matlab的其他的混合程式設計請看網摘,此處僅僅轉載vc++怎麼調用matlab自定義函數(即自己寫的m檔案函數)
http://blog.sina.com.cn/s/blog_5fd4166b0100pmk9.html
一定要按如下配置好,特别注意的是第一步。否則不能初始化程式,而且所有矩陣相關操作不能進行記憶體配置設定
1. matlab:mex -setup 選擇vs2005
mbuild -setup 選擇vs2005
2. 寫matlab函數:
例如:function m=mypascal(n)
m=pascal(n);
m=m';
儲存為:test.m
3. 将matlab函數轉為VC++可調用的庫函數:
mcc -W lib:libtest -T link:lib test.m
其中,libtest為生成檔案的名字,test.m為要轉換的m檔案
—————————————————————————————————————————————————
4. VS2005配置:Tools->Options->Projects and Solutions->VC++ Directions
Include Files中添加:...\MATLAB\R2010b\extern\include
lib Files中添加:...s\MATLAB\R2010b\extern\lib\win32\microsoft
5.建立VS2005工程,将第3步生成的.h .lib .dll檔案拷到該工程目錄中,并添加如下配置:
#include "libtest.h"
linker->Input->Additional Dependencies: libtest.lib mclmcrrt.lib
6.調用
① 初始化:if (!mclInitializeApplication(NULL,0))
{
//AfxMessageBox("不能初始化程式");
}
if (!libtestInitialize())
{
//AfxMessageBox("不能初始化連接配接庫");
}
②調用:double data;
data=double(m_size);mxArray *size; //輸入參數m_size可以是任意正整數
mxArray *out=NULL; //輸出參數
//建立mxArray資料對象,雙精度标量
size=mxCreateDoubleScalar(data);
//記憶體複制指派
memcpy(mxGetPr(size), &data, 1*sizeof(double));
mlfTest(1, &out, size);//函數調用 [第一個參數表示輸出參數的個數這裡有一個]
CString strtext;
for (i=0;i<m_size;i++)
for(j=0;j<m_size;j++)
{
strtext.Format("%.f", *(mxGetPr(out)+i*m_size+j));
cout << strtext < }
③終止:libtestTerminate();//終止程序
mclTerminateApplication();//終止MCR