為何結合?
- C++Builder:介面、資料採集、通訊埠控制強,但數值分析、繪圖弱。
- MATLAB:矩陣運算、工具箱、繪圖極強,但無即時控制、埠操作能力。
實現方案比較
| 方式 | 優點 | 缺點 |
| DDE (MATLAB 4.2+) | 簡單 | 增大主程式碼、速度慢 |
| DLL 共享記憶體 (推薦) | 高效、函式呼叫式、資料零拷貝 | 需建立 Wrapper DLL |
DLL 方案核心步驟
- 取得 MATLAB 提供的外部連結 DLL (如 `libmat.dll`, `libmx.dll`, `libeng.dll`)。
- 用 `implib` 或 C++Builder 的 `.lib` 產生工具產生對應 `.lib` 靜態連結庫。
- 專案加入 `.lib`,標頭檔宣告所需 MATLAB 函式 (如 `engOpen`, `engEvalString`, `mxCreateDoubleMatrix` 等)。
- C++Builder 端配置資料 → 填入 `mxArray` → 呼叫 MATLAB 引擎函式 → 取回結果 → 更新 UI。
關鍵點
- 資料佈局:MATLAB 為 Column-major,C/C++ 為 Row-major,矩陣傳遞需轉置或調整索引。
- 記憶體管理:`mxArray` 由 MATLAB 分配/釋放,嚴禁用 C++ `delete`。
- 錯誤處理:`engOutputBuffer` 設定回呼捕捉 MATLAB 錯誤訊息。
此法實現「C++ 做介面/控制,MATLAB 做核心運算/繪圖」的最佳分工。
- 上一篇文章: Windows 檔案保護 (WFP) 應用:列舉受保護檔案與檢測單一檔案
- 下一篇文章: Winsock API 函數大全 (WinSock 1.1):BSD 標準與 Windows 擴展函數完整列表
Copyright ©
程式碼之家 All Rights Reserved