上一章介紹 MATLAB Compiler 基本用法,本章示範如何將 .m 檔轉換為對應的 C/C++ 檔案並在 VC 中呼叫。範例沿用第四章的線性方程組求解。
gjfcz.mfunction [x] = gjfcz(A,b)
% A = [-1.5 1 2; 4 2 3; -3 2 8]
% b = [3; 5; 6]
x = A \ b
mcc -m 生成 C 程式碼與可執行檔> mcc -m gjfcz.m
於 MATLAB 工作目錄產生:gjfcz.exe、gjfcz.c、gjfcz.h、gjfcz_main.c。我們需要 gjfcz.c、gjfcz.h。
JXXFC面板加入一個按鈕,複製 gjfcz.c、gjfcz.h 到專案目錄並加入專案。
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, *b = NULL, *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); // 呼叫求解函數
TerminateModule_gjfcz(); // 結束模組
memcpy(Xdata, mxGetPr(x), 3 * sizeof(double)); // 取得結果指標
CString R;
R.Format(_T("%f\n%f\n%f"), Xdata[0], Xdata[1], Xdata[2]);
MessageBox(R);
mxDestroyArray(A); mxDestroyArray(b); mxDestroyArray(x);
mlfRestorePreviousContext(0, 0);
}

圖 1
使用 MATLAB Compiler 將 .m 檔編譯為 C/C++ 檔再於 VC 中呼叫,是最常用的介面方式。雖然仍使用 C/C++ 函式庫函數,但比完全手寫 C/C++ 簡單許多。靈活運用編譯器需對 C/C++ 函式庫有一定了解,MATLAB 提供 cmath_ref2b.pdf 與 cmath_ug2b.pdf 參考。注意:MATLAB 7.0 介面大幅變更,舊版程式碼不相容。