首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 與 MATLAB 混合編程入門:MATLAB Compiler 生成 DLL 並在 VC 中調用全流程

     編輯:VC 教學

MATLAB 強大的數學運算與繪圖能力,配合 VC++ 高效的系統級開發與界面構建,是科學工程軟體的黃金組合。本文以 MATLAB 6.5 / VC 6.0 為環境,詳細記錄從 M 檔案編譯生成 DLL、配置 VC 專案、到成功調用繪圖函數的完整步驟,並說明版本差異與常見坑點。

一、 環境準備與編譯器配置

  1. 配置 MEX 編譯器: MATLAB 命令列執行 mex -setup 與 mbuild -setup,選擇 Visual C++ 6.0 編譯器。
  2. VC 專案屬性設定:
    • C/C++ -> General -> Additional Include Directories: 加入 MATLAB 安裝路徑下的 extern\include (含 matrix.h, mex.h 等)。
    • Linker -> General -> Additional Library Directories: 加入 extern\lib\win32\microsoft (含 libmx.lib, libmat.lib, libmex.lib 等)。

二、 編寫 M 函數並編譯為 DLL

1. 建立測試 M 檔 huatu_test.m

function y = huatu_test()
x = -10:0.1:10;
y = sin(x);
plot(x, y, '*'); % 繪製正弦波散點圖

2. 使用 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。

三、 VC 專案建立與調用

1. 建立對話框基礎專案 ceshi

資源編輯器加入一個按鈕 IDC_BUTTON1 (標題「測試」)。

2. 複製並加入生成檔案

將 dlltest.h、dlltest.lib、dlltest.dll 複製到 VC 專案目錄,專案右鍵 Add to Project -> Files 加入 .h 與 .lib (.dll 執行時需放在 EXE 同目錄)。

3. 程式碼整合

// 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();
}

4. 執行結果

點擊按鈕,彈出 MATLAB 圖形視窗顯示正弦波散點圖。

四、 關鍵注意事項與版本差異

  • MATLAB 7.0 (R14) 以上版本: Compiler 升級為 4.0,mcc 參數語法大幅變更,本文 libhg 等舊參數將失效。請參考新版文檔使用 mcc -W cpplib:libname ... 等新語法。
  • mcc 常用宏選項簡化:mcc -m myfun 直接生成獨立 EXE;mcc -B sgl myfun 生成 C 版可執行檔。
  • 圖形視窗缺少選單/工具列: 複製 MATLAB bin 目錄下相關資源檔到程式執行目錄。
  • 記憶體管理: 返回的 mxArray* 需手動 mxDestroyArray 釋放,避免洩漏。

五、 總結

利用 MATLAB Compiler 生成 DLL,將複雜算法封裝為標準 C 介面,VC 僅需幾行代碼即可調用,極大降低了混合開發門檻。掌握 mcc 參數與 VC 專案配置是關鍵。歡迎技術交流 (Email: c_dinco@sina.com, QQ: 44760299)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved