MATLAB 強大的數學運算與繪圖能力,配合 VC++ 高效的系統級開發與界面構建,是科學工程軟體的黃金組合。本文以 MATLAB 6.5 / VC 6.0 為環境,詳細記錄從 M 檔案編譯生成 DLL、配置 VC 專案、到成功調用繪圖函數的完整步驟,並說明版本差異與常見坑點。
mex -setup 與 mbuild -setup,選擇 Visual C++ 6.0 編譯器。extern\include (含 matrix.h, mex.h 等)。extern\lib\win32\microsoft (含 libmx.lib, libmat.lib, libmex.lib 等)。huatu_test.mfunction y = huatu_test() x = -10:0.1:10; y = sin(x); plot(x, y, '*'); % 繪製正弦波散點圖
mcc 命令編譯mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib huatu_test.m
參數解析:
-t:產生 C/C++ 原始碼 (中間檔)。-W libhg:dlltest:生成使用 C 圖形庫的共用庫,輸出基底名稱 dlltest。-T link:lib:產生靜態導入庫 .lib 與動態連結庫 .dll。-h libmmfile.mlib:包含 MATLAB 共用數學庫輔助函數。編譯成功後,當前目錄 (通常是 matlabroot/work) 產生三個關鍵檔案:dlltest.h、dlltest.lib、dlltest.dll。
ceshi資源編輯器加入一個按鈕 IDC_BUTTON1 (標題「測試」)。
將 dlltest.h、dlltest.lib、dlltest.dll 複製到 VC 專案目錄,專案右鍵 Add to Project -> Files 加入 .h 與 .lib (.dll 執行時需放在 EXE 同目錄)。
// ceshiDlg.cpp
#include "dlltest.h" // 引入 DLL 介面宣告
#pragma comment(lib, "dlltest") // 告訴連結器引入 dlltest.lib
void CCeshiDlg::OnButton1() {
// 1. 初始化 DLL 運行時 (必須)
dlltestInitialize();
// 2. 呼叫對應 M 函數的封裝介面
// 原型: extern mxArray * mlfHuatu_test(void);
mlfHuatu_test();
// 3. 終止 DLL 運行時 (必須)
dlltestTerminate();
}
點擊按鈕,彈出 MATLAB 圖形視窗顯示正弦波散點圖。

mcc 參數語法大幅變更,本文 libhg 等舊參數將失效。請參考新版文檔使用 mcc -W cpplib:libname ... 等新語法。mcc 常用宏選項簡化:mcc -m myfun 直接生成獨立 EXE;mcc -B sgl myfun 生成 C 版可執行檔。bin 目錄下相關資源檔到程式執行目錄。mxArray* 需手動 mxDestroyArray 釋放,避免洩漏。利用 MATLAB Compiler 生成 DLL,將複雜算法封裝為標準 C 介面,VC 僅需幾行代碼即可調用,極大降低了混合開發門檻。掌握 mcc 參數與 VC 專案配置是關鍵。歡迎技術交流 (Email: c_dinco@sina.com, QQ: 44760299)。