matlab代碼:
代碼下面有,添加滾動條的視窗,這個地方主要是一個事件,點選按鈕後,調用matlab代碼生成的dll進行運算,完後顯示的結果視窗顯示出來,完後移動視窗到指定位置
實作效果:

之前配置的過程主要參考了下面的連結:
<a target="_blank" href="http://blog.csdn.net/stardust94605/article/details/8972064">http://blog.csdn.net/stardust94605/article/details/8972064</a>
下面是文章内容:
思路:為了實作matlab與C++混合程式設計,采用由m檔案構造動态連結庫然後在visual studio中調用的方法。
本人系統:Windows 7旗艦版(32位),VS2010旗艦版,Matlab R2012b 隻有R2010b或以上版本才識别VS2010編輯器
1. matlab中dll建立
1.1 m檔案編寫
function [ yt ] = myfitline( x,y,m,xrange,t )
%xy為坐标向量,m為多項式階數,xrange為顯示圖上面的坐标範圍,t為要求的坐标橫軸位置
% Detailed explanation goes here
p=polyfit(x,y,m);%計算各階系數p1x^m+p2x^(m-1)+....+ pmx+ p(m+1)
yy=polyval(p,xrange);%計算一個區域内的函數值用于畫圖
yt=polyval(p,t); % 計算指定x下的函數對應的y值
plot(x,y,'r*',xrange,yy,'b')
end
1.2 設定編譯器
>> mex -setup 選擇VS2010
>> mbuild -setup 選擇VS2010
>> mcc -W cpplib:Myfitline -T link:lib myfitline (這就建立好了)
其中,mcc是Matlab提供的編譯指令,對于這一點,Matlab的幫助說明如下:
-W lib:string link:lib其中-W是控制編譯之後的封裝格式,cpplib,是指編譯成C++的lib,cpplib冒号後面是指編譯的庫的名字,-T表示目标,
link:lib表示要連接配接到一個庫檔案的目标,目标的名字是後面的myfitline,即你寫的m函數的名字。
運作完之後,你的目錄下面,将會出現以下一些檔案:
Myfitline.cpp
Myfitline.exp
Myfitline.dll
Myfitline.exports
Myfitline.h
Myfitline.lib
mccExcludedFiles.log
readme.txt
具體每一個檔案的意思,請查幫助,這裡隻說其中很有用的幾個:
Myfitline.dll是編譯好的動态庫,myfitline這個函數封裝在裡面,Myfitline.h是對應的頭檔案,在C裡面調用這個函數的時候,需要include這個頭檔案,
在這個頭檔案的最後,你可以看到下面的内容:
extern LIB_Myfitline_CPP_API void MW_CALL_CONV myfitline(int nargout, mwArray& yt, const mwArray& x,
const mwArray& y, const mwArray& m, const mwArray& xrange, const mwArray& t);
這就是myfitline的C函數的聲明。nargout表示輸出變量的個數,其他就是對應了m函數的幾個變量。
注意,變量的類型是mwArray,這是Matlab提供的一個特殊的變量類型(在7.0的版本,編譯之後,變量類型是mxArray)。mwArray是一個類,具體可以查幫助。
2.系統環境配置
Computer - > Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下為MATLAB
2012軟體安裝目錄)
...\MATLAB\extern\lib\win32\microsoft;
...\MATLAB\bin\win32
Computer - > Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加
...\MATLAB\runtime\win32;
...\MATLAB\bin;
...\MATLAB\extern\lib\win32\microsoft;
3.vs2010環境配置
①Property Pages -> VC++ Directories -> Include Directories, 添加(安裝目錄下)
...\MATLAB\extern\include\
②Property Pages -> VC++ Directories -> Library Directories, 添加
...\MATLAB\extern\lib\win32\microsoft
③Property Pages -> C/C++ -> General -> Additional Include Directories, 添加
...\MATLAB\extern\include\
④Property Pages -> Linker -> General -> Additional Library Directories, 添加
⑤Property Pages -> Linker -> Input -> Additional Dependencies, 添加
libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
Myfitline.lib
4.vs2010下完成程式
把剛才生成的*.h *.dll *.lib檔案複制到剛剛建立的工程的檔案夾下,并且用添加—現有項添加的工程中。(此處的*代表你的m檔案名稱)
調用函數 myfitline的檔案前要
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "Myfitline.h”
具體程式如下:
void CNewFeatureofStormView::Onposition()
{
// TODO: 在此添加指令處理程式代碼
if( !MyfitlineInitialize())
{
MessageBox(_T("初始化失敗"));
}
// 為變量配置設定記憶體空間,可以查幫助mwArray
mwArray mwX(5, 1, mxDOUBLE_CLASS); // 5,1表示矩陣的大小(所有maltab隻有一種變量,就是矩陣,
mwArray mwY(5, 1, mxDOUBLE_CLASS);//為了和Cpp變量接軌,設定成1*5的矩陣,mxDOUBLE_CLASS表示變量的精度)
mwArray mwM(1, 1, mxDOUBLE_CLASS);
mwArray mwXR(50,1, mxDOUBLE_CLASS);
mwArray mwYT(1,1, mxDOUBLE_CLASS);
mwArray mwT(1,1, mxDOUBLE_CLASS);
int x[5]={432,435,438,441,443}; //樣本點坐标
int y[5]={136,138,140,145,147}; //
int xr[50],m=3,t=446; //參數設定
for (int i=400;i<450;i++)
{
xr[i-400]=i;
}
mwX.SetData(x, 5); //調用類裡面的SetData函數給類指派
mwY.SetData(y, 5);
mwM.SetData(&m, 1);
mwXR.SetData(xr, 50);
mwT.SetData(&t, 1);
myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);
double c = mwYT.Get(1, 1); //調用類裡面的Get函數擷取取函數傳回值
CString strNumber;
strNumber.Format(_T("%lf"),c);
MessageBox(strNumber, _T("坐标"));
// 後面是一些終止調用的程式
MyfitlineTerminate();
// terminate MCR
mclTerminateApplication();
}