在上一章中對MATLAB 編譯器做了簡要介紹,並介紹了如何將m文件轉換成VC可調用的dll文件,在這章中介紹如何利用編譯器將m文件轉換成對應的C\C++文件,並在VC中調用。這章節中的例子是在第四章中介紹過的解線形方程組。
首先要保證編譯器設置正確,編譯器的設置可以參考前面兩章的內容。如果以前已經進行了配置就不需要這一步。
1、在MATLAB中編寫如下函數: function [x]=gjfcz(A,b)
保存名為gjfcz.m,該函數的功能為求解線形方程組,可參考第四章的內容。
%A=[-1.5 1 2; 4 2 3 ; -3 2 8]
%b=[3;5;6]
x=A\b
2、在MATLAB的命令窗口輸入以下命令:mcc –m gjfcz.m
該命令用來生成對應的C文件和可執行程序。在MATLAB工作目錄下(一般是MATLAB\work)將會生成如下文件:gjfcz.exe,gjfcz.c,gjfcz.h,gjfcz_main.c,其中gjfcz.c,gjfcz.h是我們需要的文件。
3、新建名為JXXFC基於對話框的工程,面板上添加一個按扭。
4、拷貝gjfcz.c,gjfcz.h兩文件到工程目錄下,並將文件引入工程(Project->Add to Project->Files)。
5、為按扭添加如下響應代碼:
void CJXXFCDlg::OnButton1()
{
static double Adata[]={-1.5,4,-3,1,2,2,2,3,8};
static double bdata[]={3,5,6};
double Xdata[100];
mxArray *A = NULL;//賦初值
mxArray *b = NULL;
mxArray *x = NULL;
/* 使用自動內存管理*/
mlfEnterNewContext(0, 0);
//創建矩陣
mlfAssign(&A, mlfDoubleMatrix(3, 3, Adata, NULL));
mlfAssign(&b, mlfDoubleMatrix(3, 1, bdata, NULL));
InitializeModule_gjfcz();
x=mlfGjfcz(A,b);//調用gjfcz.c中的函數求解
TerminateModule_gjfcz();
memcpy(Xdata,mxGetPr(x),3*sizeof(double));
// mxGetPr(x)用來得到x的地址
CString R;
R.Format("%f\n%f\n%f",Xdata[0],Xdata[1],Xdata[2]);
MessageBox(R);
/* 釋放矩陣所占的內存*/
mxDestroyArray(A);
mxDestroyArray(b);
mxDestroyArray(x);
/* 禁用自動內存管理*/
mlfRestorePreviousContext(0, 0);
}
編譯、連接,運行結果如圖1:
圖1
本程序在VC6.0+MATLAB6.5環境下調式通過,在VC和MATLAB接口編程中,使用編譯器將m文件編譯成C\C++文件,然後在VC中調用該C\C++文件是最常用的方法。 本例中雖然使用了C\C++函數庫中的函數,但比起完全使用C\C++函數編寫程序要簡單了許多,可見要靈活的使用編譯器,對C\C++函數庫有一定的了解是很必要的,MATLAB提供有函數庫的幫助文檔cmath_ref2b.pdf和cmath_ug2b.pdf,使用的時候可以查閱。再次說明的是,很多朋友已經在使用MATLAB7.0的版本,7.0的版本在對C\C++接口技術上做了很大改動,不是一般的升級,對以前的版本也不兼容。新的版本提供了一個類似於VC的類庫,用了一下,感覺不是很好。
本文配套源碼