天天看點

用VS2005(2008也同樣)調用MATLAB2010的m檔案函數

關于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

繼續閱讀