Matcom是MathTools公司推出的MATLAB M檔轉C++編譯器,相較於MATLAB官方Compiler,它具備安裝輕量、轉換流程簡單、獨立於MATLAB運行環境等優勢。本文將以VC++ 6.0與Matcom 4.5為例,手把手教學從環境建置到第一個MFC整合專案的完整流程。

圖1:安裝精靈選擇VC++作為編譯器
安裝完成後啟動 MIDEVA(Matcom Integrated Development Environment),介面包含:

圖2:MIDEVA整合開發環境
在中文版Windows下,Matcom命令列輸入指令前需加一個空格,否則可能無法識別。

圖3:中文環境下命令輸入技巧
在MIDEVA中 File → New 建立 Test1.m:
x = 1:0.1:10;
y = sin(x);
plot(x, y);
儲存後,Matcom自動在 安裝目錄\matcom45\Debug\ 產生:Test1.h、Test1.cpp、Test1.r、Test1.obj。

圖4:建立並儲存第一個M檔
VC++中新建專案 Example(MFC AppWizard exe,Dialog based),在對話框放一個按鈕 IDC_BUTTON1。
將以下檔案複製到Example專案資料夾:
C:\matcom45\Debug\Test1.hC:\matcom45\Debug\Test1.cppC:\matcom45\lib\matlib.hC:\matcom45\lib\v4501v.lib然後在VC專案中 Project → Add to Project → Files 全部加入。

圖5:專案已加入Matcom相關檔案
在 ExampleDlg.cpp 開頭加入:
#include "matlib.h"
#include "Test1.h"
雙擊按鈕進入 OnButton1(),將 Test1.cpp 內容複製進來,並加上函式庫初始化與釋放:
void CExampleDlg::OnButton1()
{
// 初始化Matcom運行時庫
if (!initM(MATCOM_VERSION)) {
AfxMessageBox(_T("Matcom初始化失敗!"));
return;
}
// Test1.cpp 原始內容(繪圖代碼)
double x[91], y[91];
for (int i = 0; i < 91; i++) {
x[i] = 1 + i * 0.1;
y[i] = sin(x[i]);
}
// ... 繪圖相關代碼 ...
// 釋放函式庫資源
exitM();
}

圖6:完整的按鈕事件處理代碼
編譯執行,點擊按鈕即可看到正弦波圖形彈出。

圖7:首個整合專案執行效果
發布Release版本時,需隨程式附帶以下三個DLL/LIB檔案:
ago4501.dllv4501v.dllv4501.lib| 問題現象 | 原因分析 | 解決方案 |
|---|---|---|
| 編譯找不到matlib.h | 頭檔路徑未加入專案 | 專案設定→C/C++→Preprocessor→Additional include directories加入matcom\lib路徑 |
| 連結錯誤LNK2001 | 未連結v4501v.lib | 專案設定→Link→Object/library modules加入v4501v.lib |
| 執行時崩潰 | 未呼叫initM()/exitM() | 確保成對呼叫,且在使用Matcom函數前後 |
| 中文亂碼 | 字元編碼不匹配 | 專案設定為Multi-byte字元集,或統一使用Unicode |
本文展示了Matcom從安裝、編譯M檔、整合到VC++ MFC專案的最小化完整流程。雖然功能簡單,但已打通「MATLAB算法→C++代碼→VC++應用」的關鍵鏈路。下一篇將進階講解:
技術交流:QQ 44760299 | Email: c_dinco@sina.com