承接上篇「生成 DLL 基礎流程」,本文實戰演示:VC 對話框程式接收使用者輸入的 X、Y 數據點,透過 MATLAB 生成的 DLL 執行樣條插值擬合,並直接在 MATLAB 圖形視窗中顯示原始點與擬合曲線對比。
ceshidll.mfunction ceshidll(x, y)
% x, y: 輸入向量
a = min(x):0.1:max(x); % 產生密集插值點
b = interp1(x, y, a, 'spline'); % 三次樣條插值
plot(x, y, '*', a, b); % 原始點(*) + 擬合曲線
xlabel('X'); ylabel('Y'); title('插值擬合演示');
grid on;
mcc -t -W libhg:dlltest -T link:lib -h libmmfile.mlib ceshidll.m
取得 dlltest.h、dlltest.lib、dlltest.dll。
基於對話框專案 Fit,放置兩個編輯框 m_edit1 (X 序列)、m_edit2 (Y 序列),一個按鈕 IDC_BUTTON_FIT (標題「擬合」)。

.h、.lib。extern\include,Lib 加入 extern\lib\win32\microsoft。// FitDlg.cpp
#include "matlab.h" // MATLAB C API 標頭
#include "dlltest.h" // 生成的 DLL 介面
#pragma comment(lib, "dlltest")
void CFitDlg::OnButtonFit() {
UpdateData(TRUE); // 從控制項讀取字串
// --- 解析使用者輸入字串為 double 陣列 (簡易示範,實際需健壯解析) ---
// 假設輸入格式: "1 2 3 4" 或 "1,2,3,4"
CString strX = m_edit1, strY = m_edit2;
double X[100], Y[100];
int nCount = ParseNumbers(strX, X, 100); // 自寫解析函數
ParseNumbers(strY, Y, 100);
// --- 建立 MATLAB mxArray 輸入矩陣 ---
mxArray* px = mxCreateDoubleMatrix(1, nCount, mxREAL);
mxArray* py = mxCreateDoubleMatrix(1, nCount, mxREAL);
memcpy(mxGetPr(px), X, nCount * sizeof(double));
memcpy(mxGetPr(py), Y, nCount * sizeof(double));
// --- 呼叫 DLL 流程 ---
mlfEnterNewContext(0, 0); // 自動記憶體管理上下文
dlltestInitialize(); // 初始化 DLL
// 呼叫生成的介面: extern void mlfCeshidll(mxArray*, mxArray*);
mlfCeshidll(px, py);
dlltestTerminate(); // 釋放 DLL
mlfRestorePreviousContext(0, 0);
// --- 清理 ---
mxDestroyArray(px);
mxDestroyArray(py);
}
點擊「擬合」,彈出 MATLAB 圖形視窗顯示插值曲線。

mxArray* 操作。掌握 mxCreateDoubleMatrix、mxGetPr、mxDestroyArray 至關重要。mlfEnterNewContext/mlfRestorePreviousContext 配對使用,自動處理 MATLAB 內部記憶體池,防洩漏。libmx/libmat/libmex 是通吃各版本的關鍵。歡迎交流探討 (QQ: 44760299),下一篇將挑戰 VC 調用 MATLAB 神經網絡工具箱並打包部署。