主要内容

选择 MEX 应用程序

R2026b

您可以通过 MATLAB® 命令行调用您自己的 C、C++ 或 Fortran 程序(就当它们是内置函数一样)。这些程序称为 MEX 函数。MEX 函数并不适用于所有的应用程序。MATLAB 是一种高生产率环境,尤其适用于消除像 C 或 C++ 等编译语言中需要花费大量时间的低级编程。一般情况下,请在 MATLAB 中进行编程。

注意

要使用 MATLAB R2023a 或更高版本直接调用 C/C++ 库中的函数,请参阅 clibPublishInterfaceWorkflow。

要创建 MEX 函数,请使用 MATLAB API 编写您的程序,然后使用 mex 命令编译它。这些 API 提供以下功能:

  • 从 MEX 函数中调用 MATLAB 函数。

  • 无缝集成到 MATLAB 中,从 MATLAB 获取输入并向其返回结果。

  • 支持 MATLAB 数据类型。

MEX 术语

MEX 表示 MATLAB 可执行文件,它具有不同含义,如下表所示。

MEX 术语定义
MEX 文件C、C++ 或 Fortran 源代码文件。
MEX 函数在 MATLAB 环境中执行的动态链接子例程。
MEX APIC MEX API 和 Fortran MEX API 中的函数,用于在 MATLAB 环境中执行运算。
mex 编译脚本基于源文件创建二进制文件的 MATLAB 函数。

C++ MEX 函数

使用 MATLAB Data API for C++ 和 C++ MEX API 编写 C++ MEX 函数,它们支持 C++11 编程功能。这些 API 基于 matlab::data::Array 类,提供更好的类型安全性、数组边界检查并支持现代 C++ 构造以简化编码。这些 API:

  • 通过支持共享数据和原位优化来提高性能。

  • 支持原生 C++ 类型,使创建 MATLAB 数据数组更加容易。用于从 C++ 调用 MATLAB 的 feval 函数支持基本 C++ 类型和自然参量列表,而 C 函数 mexCallMATLAB 需要创建一个输入数组,其中每个输入都必须为 mxArray。

  • 通过支持迭代器和智能指针(而不是原始指针上的指针算术)来提高稳健性。这可以消除对数据指针的直接访问,降低内存损坏的可能性。

  • 支持行优先和列优先数据,使适配 C/C++ 行优先数据更加容易。

有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C++ 函数。

MATLAB R2017b 及更早版本的 C/C++ MEX 函数

如果您的 MEX 函数必须在 MATLAB R2017b 或更早版本中运行,或如果您更喜欢使用 C 语言,请使用这些库中基于 mxArray 数据结构体的函数编写源文件。有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 C 函数。

小心

不要将 C Matrix API 中的函数与 MATLAB Data API 中的函数混合使用。

Fortran MEX 函数

要编写 Fortran MEX 函数,请使用基于 mxArray 数据结构体的 Fortran MEX API 和 Fortran Matrix API。

有关详细信息,请参阅编写可从 MATLAB(MEX 文件)调用的 Fortran 函数。

另请参阅

| | |