Windows 下 MATLAB 与 C/C++ 混合编程:DLL 生成与调用
在科学计算与工程开发中,MATLAB 凭借其便捷的矩阵运算和可视化能力广受青睐,但面对大规模数据处理或高性能算法时,C/C++ 的执行效率优势无可替代。将二者结合,通过动态链接库(DLL) 实现混合编程,既能发挥 MATLAB 的易用性,又能借助 C/C++ 提升核心代码性能。
一、核心原理与准备工作
1. 核心逻辑
C/C++编译生成的 DLL 文件包含可被外部程序调用的函数,通过__declspec(dllexport)声明导出函数,并使用extern "C"指定 C 链接规范,避免 C++ 的名称修饰(name mangling)问题,确保 MATLAB 能正确识别函数名。
MATLAB 通过loadlibrary函数加载 DLL,解析函数接口后,使用calllib函数调用目标函数,实现数据交互。
2. 环境准备
- 编译器:Visual Studio 2019/2022(推荐,需安装 C/C++ 开发工具包)
- MATLAB:R2020b 及以上版本(需配置支持 C/C++ 混合编程)
- 辅助工具:Visual Studio 的
x64 Native Tools Command Prompt(用于编译 DLL,匹配 MATLAB 的 64 位架构)
二、Step 1:编写 C/C++ 函数并编译为 DLL
1. 编写 C/C++ 源码:实现矩阵加法与结构体处理
创建名为MatlabCppMix.h的头文件和MatlabCppMix.cpp的源文件,实现两个核心功能:
- 矩阵加法运算(double 类型二维数组)
- 结构体数据的读取与修改(演示复杂数据类型传递)
头文件 MatlabCppMix.h
#ifndef MATLAB_CPP_MIX_H
#define MATLAB_CPP_MIX_H
// 声明结构体:用于演示复杂数据类型传递
typedef struct {
double x; // 横坐标
double y; // 纵坐标
char label[20]; // 标签
} PointData;
// 导出函数声明:extern "C" 避免名称修饰,__declspec(dllexport) 导出函数
#ifdef __cplusplus
extern "C" {
#endif
// 功能 1:矩阵加法,输入两个 m×n 的矩阵,输出结果矩阵
__declspec(dllexport) ;
__declspec(dllexport) ;
}


