將 MATLAB 算法封裝為 C/C++ 共享庫,Qt 通過動態鏈接調用。
mwArray,避免複雜結構體。.h、.dll (Win) / .so (Linux)、_mcr 運行時組件。.pro 文件:
INCLUDEPATH += $$PWD/matlab_lib/include
LIBS += -L$$PWD/matlab_lib/lib -lmyAlgorithm
部署時需安裝 MATLAB Runtime (MCR) 對應版本(免費,無需授權)。
#include "myAlgorithm.h"
#include "myAlgorithm_initialize.h"
#include "myAlgorithm_terminate.h"
void MainWindow::processSignal() {
if (!myAlgorithmInitialize()) { qDebug() << "MCR init failed"; return; }
mwArray input(data, rows, cols, mxDOUBLE_CLASS);
mwArray output;
myAlgorithm(1, output, input); // 1: 輸出參數個數
double* result = (double*)output.GetData();
// 使用 result...
myAlgorithmTerminate();
}
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| MATLAB Compiler SDK (DLL) | 官方支持、類型安全、性能高 | 需部署 MCR (數百MB)、授權成本 | 核心算法、商業產品 |
| MATLAB Engine API | 直接調用 MATLAB 會話、交互式 | 需安裝完整 MATLAB、啟動慢、單線程 | 原型驗證、科研工具 |
| C/C++ 手工移植 | 無依賴、極致性能、全控制 | 工作量大、易出錯、維護雙份代碼 | 算法簡單、長期演進 |
| Python 移植 + ZeroMQ/gRPC | 生態豐富、跨語言、易維護 | 引入服務化複雜度、延遲較高 | 微服務架構、團隊熟悉 Python |
mwArray 構造/拷貝有開銷,大數據量考慮零拷貝接口(mxGetData)。mwException,避免崩潰主程序。推薦先用 Library Compiler 生成 DLL 驗證算法正確性,再集成到 Qt 工程。