C++ MEX API

Примечание

Интерфейс MEX API на C++ несовместим с интерфейсом MEX API на C, описанным в файловых приложениях MEX на C. Вы не можете смешивать эти API в файле MEX.

C++ MEX API позволяет создавать приложения, которые используют преимущества функций C++ 11, таких как семантика перемещения, обработка исключений и управление памятью .

matlab::mex::FunctionБазовый класс для функций C++ MEX
matlab::mex::ArgumentListКонтейнер для входов и выходов от функций C++ MEX
matlab::engine::MATLABEngineКласс, определяющий engine API

matlab::mex::Function

Все реализации файлов MEX являются классами, которые получают от matlab::mex::Function.

std::shared_ptr<matlab::engine::MatlabEngine> getEngine()Получите указатель на MATLABEngine объект
void mexLock()Предотвратите удаление файла MEX из памяти
void mexUnLock()Разрешить удаление файла MEX из памяти
std::u16string getFunctionName()Получите имя текущей MEX-функции

matlab::mex::ArgumentList

Аргументы MEX-функции переданы через operator() от MexFunction классы matlab::mex::ArgumentList контейнеры. ArgumentList - полная область значений базового набора массивов. The ArgumentList объект поддерживает следующие функции.

operator[]Включает [] индексация в элементы ArgumentList.
begin()Начать итератор.
end()Конечный итератор.
size()Возвращает количество элементов в списке аргументов. Используйте эту функцию для проверки количества входов и выходов, заданных в узле вызова.
empty()Возвращает логическое значение, указывающее, пуст ли список аргументов (size() == 0).

Engine API для C++

Доступ к MATLAB® функции, переменные и объекты, использующие matlab::engine::MATLABEngine API описан в следующих разделах. Чтобы вызвать matlab::engine::MATLABEngine functions, получите общий указатель, который возвращается matlab::mex::Function::getEngine функция. Для примера:

std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();

Используйте этот указатель для вызова функций Engine. Для примера:

matlabPtr->feval(...);

Механизм вызова функционирует только в том же потоке, что и MexFunction класс.

matlab:: engine:: MATLABEngine:: fevalВызов функций MATLAB с аргументами
matlab:: engine:: MATLABEngine:: fevalAsyncВызовите функцию MATLAB с аргументами и возвращенными значениями асинхронно.
matlab:: engine:: MATLABEngine:: evalВычислите выражения MATLAB в базовом рабочем пространстве
matlab:: engine:: MATLABEngine:: evalAsyncВыполняйте выражения MATLAB в базовом рабочем пространстве асинхронно
matlab:: engine:: MATLABEngine:: getVariableПолучите переменные из основы MATLAB или глобальной рабочей области
matlab:: engine:: MATLABEngine:: getVariableAsyncПолучите переменные из основы MATLAB или глобальной рабочей области асинхронно
matlab:: engine:: MATLABEngine:: setVariableПоместите переменные в основу MATLAB или глобальную рабочую область
matlab:: engine:: MATLABEngine:: setVariableAsyncПоместите переменные в основу MATLAB или глобальную рабочую область асинхронно
matlab:: engine:: MATLABEngine:: getPropertyСвойство Get object
matlab:: engine:: MATLABEngine:: getPropertyAsyncАсинхронно получить свойство объекта
matlab:: engine:: MATLABEngine:: setPropertyУстановите свойство объекта
matlab:: engine:: MATLABEngine:: setPropertyAsyncЗадайте свойство объекта асинхронно

matlab::engine::MATLABEngine::feval

std::vector<matlab::data::Array> feval(const std::u16string &function,
   const size_t numReturned,
   const std::vector<matlab::data::Array> &args,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = 
       std::shared_ptr<matlab::engine::StreamBuffer>,
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = 
       std::shared_ptr<matlab::engine::StreamBuffer>())
matlab::data::Array feval(const std::u16string &function, 
   const std::vector<matlab::data::Array> &args, 
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = 
       std::shared_ptr<matlab::engine::StreamBuffer>(),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = 
       std::shared_ptr<matlab::engine::StreamBuffer>())
matlab::data::Array feval(const std::u16string &function,
   const matlab::data::Array &arg,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = 
       std::shared_ptr<matlab::engine::StreamBuffer>(),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = 
       std::shared_ptr<matlab::engine::StreamBuffer>())
ResultType feval(const std::u16string &function,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output,
   const std::shared_ptr<matlab::engine::StreamBuffer> &error,
   RhsArgs&&... rhsArgs )
ResultType feval(const std::u16string &function,
   RhsArgs&&... rhsArgs)

Описание

Вызовите функции MATLAB из MEX-функций. Использование feval вызов функций MATLAB с аргументами, переданными из MEX-функций, и возврат результата из MATLAB в MEX-функцию.

Входами и выходами являются типы, заданные MATLAB Data API. Существует также синтаксис для поддержки собственных типов C++.

Параметры

const std::u16string &function

Имя функции MATLAB или скрипта для оценки. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const size_t nlhs

Количество возвращенных значений.

const std::vector<matlab::data::Array> &args

Несколько входных параметров для передачи в функцию MATLAB в std::vector. Вектор преобразуется в массив столбцов в MATLAB.

const matlab::data::Array &arg

Один входной параметр для передачи в функцию MATLAB.

const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>()

Буфер потока, используемый для хранения стандартного выхода из функции MATLAB.

const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>()

Буфер потока, используемый для хранения сообщения об ошибке от функции MATLAB.

RhsArgs&&... rhsArgs

Нативные типы данных C++, используемые для входных параметров функции. feval принимает скалярные входы этих типов данных C++: bool, int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, float, double.

Возвращаемое значение

std::vector<matlab::data::Array>

Выходы, возвращенные от функции MATLAB.

matlab::data::Array

Один выход возвращен из функции MATLAB.

ResultType

Выход, возвращенный из функции MATLAB как заданный пользователем тип. Может быть std::tuple при возвращении нескольких аргументов.

Исключения

matlab::engine::MATLABException

В функции есть ошибка времени выполнения MATLAB.

matlab::engine::TypeConversionException

Результат функции MATLAB не может быть преобразован в заданный тип.

matlab::engine::MATLABSyntaxException

В функции MATLAB имеется синтаксическая ошибка.

Для получения дополнительной информации смотрите Вызов функций MATLAB из MEX-функций

matlab::engine::MATLABEngine::fevalAsync

FutureResult<std::vector<matlab::data::Array>> fevalAsync(const std::u16string &function,
   const size_t numReturned,
   const std::vector<matlab::data::Array> &args,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<matlab::data::Array> fevalAsync(const std::u16string &function,
   const std::vector<matlab::data::Array> &args,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>(),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<matlab::data::Array> fevalAsync(const std::u16string &function,
   const matlab::data::Array &arg,
   const std::shared_ptr<matlab::engine::StreamBuffer> & output = std::shared_ptr<matlab::engine::StreamBuffer>(),
   const std::shared_ptr<matlab::engine::StreamBuffer> & error = std::shared_ptr<matlab::engine::StreamBuffer>())
FutureResult<ResultType> fevalAsync(const std::u16string &function,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output,
   const std::shared_ptr<matlab::engine::StreamBuffer> &error,
   RhsArgs&&... rhsArgs)
FutureResult<ResultType> fevalAsync(const std::u16string &function,
   RhsArgs&&... rhsArgs)

Описание

Вызовите функцию MATLAB с аргументами и возвращенными значениями асинхронно. Для получения дополнительной информации Создание асинхронных запросов с использованием mexCallMATLAB.

Параметры

const std::u16string &function

Имя функции MATLAB или скрипта для оценки. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const size_t numReturned

Количество возвращенных значений

const std::vector<matlab::data::Array> &args

Несколько входных параметров для передачи в функцию MATLAB в std::vector. Вектор преобразуется в массив столбцов в MATLAB.

const matlab::data::Array arg

Один входной параметр для передачи в функцию MATLAB.

const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer>()

Буфер потока, используемый для хранения стандартного выхода из функции MATLAB.

const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer>()

Буфер потока, используемый для хранения сообщения об ошибке от функции MATLAB.

RhsArgs&&... rhsArgs

Нативные типы данных C++, используемые для входных параметров функции. feval принимает скалярные входы этих типов данных C++: bool, int8_t, int16_t, int32_t, int64_t, uint8_t, uint16_t, uint32_t, uint64_t, float, double.

Возвращаемое значение

FutureResult

A FutureResult объект, используемый для получения результата вызова функции MATLAB.

Исключения

Ничего

matlab::engine::MATLABEngine::eval

void eval(const std::u16string &statement,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = 
       std::shared_ptr<matlab::engine::StreamBuffer> (),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = 
       std::shared_ptr<matlab::engine::StreamBuffer> ())

Описание

Оцените выражение MATLAB как текстовую строку в рабочей области вызывающей функции.

Параметры

const std::u16string &statement

Выражение MATLAB для оценки

const std::shared_ptr<matlab::engine::StreamBuffer> &output

Буфер потока, используемый для хранения стандартных выходов из выражения MATLAB

const std::shared_ptr<matlab::engine::StreamBuffer> &error

Буфер потока, используемый для хранения сообщения об ошибке от команды MATLAB

Исключения

matlab::engine::MATLABExecutionException

В выражении MATLAB произошла ошибка времени выполнения.

matlab::engine::MATLABSyntaxException

Синтаксическая ошибка в выражении MATLAB.

Для получения дополнительной информации смотрите Выполнение выражений MATLAB из MEX-функции

matlab::engine::MATLABEngine::evalAsync

FutureResult<void> evalAsync(const std::u16string &str,
   const std::shared_ptr<matlab::engine::StreamBuffer> &output = std::shared_ptr<matlab::engine::StreamBuffer> (),
   const std::shared_ptr<matlab::engine::StreamBuffer> &error = std::shared_ptr<matlab::engine::StreamBuffer> ())

Описание

Рассчитать выражение MATLAB как строку асинхронно. Для получения дополнительной информации Создание асинхронных запросов с использованием mexCallMATLAB.

Параметры

const std::u16string &str

Выражение MATLAB для оценки

const std::shared_ptr<matlab::engine::StreamBuffer> & output

Буфер потока, используемый для хранения стандартных выходов из выражения MATLAB.

const std::shared_ptr<matlab::engine::StreamBuffer> & error

Буфер потока, используемый для хранения сообщения об ошибке от команды MATLAB.

Возвращаемое значение

matlab::engine::FutureResult

A FutureResult объект, используемый для ожидания завершения выражения MATLAB.

Исключения

Ничего

matlab::engine::MATLABEngine::getVariable

matlab::data::Array getVariable(const std::u16string &varName,
    WorkspaceType workspaceType = WorkspaceType::BASE)

Описание

Получите переменную из основы MATLAB или глобальной рабочей области.

Параметры

const std::u16string& varName

Имя переменной в рабочем пространстве MATLAB. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE

Рабочее пространство MATLAB (BASE или GLOBAL), из которого можно получить переменную. Для получения дополнительной информации см. global и matlab::engine::WorkspaceType.

Возвращаемое значение

matlab::data::Array

Переменная, полученная из основы MATLAB или глобальной рабочей области

Исключения

matlab::engine::MATLABExecutionException

Запрошенная переменная не существует в указанной основе MATLAB или глобальной рабочей области.

Для получения дополнительной информации смотрите Задать и Получить переменный MATLAB из MEX

matlab::engine::MATLABEngine::getVariableAsync

FutureResult<matlab::data::Array> getVariableAsync(const std::u16string &varName,
    WorkspaceType workspaceType = WorkspaceType::BASE)

Описание

Получите переменную из основы MATLAB или глобальной рабочей области асинхронно.

Параметры

const std::u16string& varName

Имя переменной в рабочем пространстве MATLAB. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

WorkspaceType workspaceType = WorkspaceType::BASE

Рабочее пространство MATLAB (BASE или GLOBAL), из которого можно получить переменную. Для получения дополнительной информации см. global.

Возвращаемое значение

matlab::engine::FutureResult

A FutureResult объект, который можно использовать, чтобы получить переменную, полученную из рабочего пространства MATLAB, как matlab.data.Array.

Исключения

Ничего

matlab::engine::MATLABEngine::setVariable

void setVariable(const std::u16string &varName,
   const matlab::data::Array &var,
   WorkspaceType workspaceType = WorkspaceType::BASE)

Описание

Поместите переменную в основу MATLAB или глобальную рабочую область. Если переменная с таким же именем существует в рабочем пространстве MATLAB, setVariable перезаписывает его.

Параметры

const std::u16string& varName

Имя переменной, созданной в рабочем пространстве MATLAB. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const matlab::data::Array var

Значение переменной, которую нужно создать в рабочем пространстве MATLAB.

matlab::engine::WorkspaceType workspaceType = matlab::engine::WorkspaceType::BASE

Рабочее пространство MATLAB (BASE или GLOBAL), в которую помещается переменная. Для получения дополнительной информации см. global и matlab::engine::WorkspaceType.

Для получения дополнительной информации смотрите Задать и Получить переменный MATLAB из MEX

matlab::engine::MATLABEngine::setVariableAsync

FutureResult<void> setVariableAsync(const std::u16string &varName,
   const matlab::data::Array var,
   WorkspaceType workspaceType = WorkspaceType::BASE)

Описание

Поместите переменную в основу MATLAB или глобальную рабочую область асинхронно. Если переменная с таким же именем существует в базовом рабочем пространстве MATLAB, setVariableAsync перезаписывает его.

Параметры

const std::u16string& varName

Имя переменной, созданной в рабочем пространстве MATLAB. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const matlab::data::Array var

Значение переменной, которую нужно создать в рабочем пространстве MATLAB

WorkspaceType workspaceType = WorkspaceType::BASE

Поместите переменную в рабочую область MATLAB BASE или GLOBAL. Для получения дополнительной информации см. global.

Исключения

Ничего

matlab::engine::MATLABEngine::getProperty

matlab::data::Array getProperty(const matlab::data::Array &objectArray,
    size_t index,
    const std::u16string &propertyName)
matlab::data::Array getProperty(const matlab::data::Array &object,
    const std::u16string &propertyName)

Описание

Получите значение свойства объекта. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.

Параметры

const matlab::data::Array &objectArray

Массив объектов MATLAB

const matlab::data::Array &object

Скалярный объект MATLAB

size_t index

Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого возвращается

const std::u16string &propertyName

Имя свойства. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

Возвращаемое значение

matlab::data::Array

Значение именованного свойства

Исключения

matlab::engine::MATLABExecutionException

Свойство не существует.

Для получения дополнительной информации смотрите Объекты MATLAB в MEX-функциях

matlab::engine::MATLABEngine::getPropertyAsync

matlab::engine::FutureResult<matlab::data::Array> getPropertyAsync(const matlab::data::Array &objectArray,
    size_t index,
    const std::u16string &propertyName)
matlab::engine::FutureResult<matlab::data::Array> getPropertyAsync(const matlab::data::Array &object,
   const std::u16string &propertyName)

Описание

Получите значение свойства объекта асинхронно. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.

Параметры

const matlab::data::Array &objectArray

Массив объектов MATLAB

const matlab::data::Array &object

Скалярный объект MATLAB

size_t index

Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого возвращается

const std::u16string &propertyName

Имя свойства. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

Возвращаемое значение

matlab::engine::FutureResult

matlab::engine::FutureResult объект, который используется для синхронизации операции.

Исключения

Ничего

matlab::engine::MATLABEngine::setProperty

void setProperty(matlab::data::Array &objectArray,   
    size_t index,
    const std::u16string &propertyName,
    const matlab::data::Array &propertyValue)
void setProperty(matlab::data::Array &object, 
    const std::u16string &propertyName,
    const matlab::data::Array &propertyValue)

Описание

Установите значение свойства объекта. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите задать.

Параметры

matlab::data::Array &objectArray

Массив объектов MATLAB

matlab::data::Array &object

Скалярный объект MATLAB

size_t index

Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого задано

const std::u16string &propertyName

Имя свойства, которое нужно задать. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const matlab::data::Array &propertyValue

Значение, присвоенное свойству

Исключения

matlab::engine::MATLABExecutionException

Свойство не существует.

Для получения дополнительной информации смотрите Объекты MATLAB в MEX-функциях

matlab::engine::MATLABEngine::setPropertyAsync

FutureResult<void> setPropertyAsync(matlab::data::Array &objectArray,   
    size_t index,
    const std::u16string &propertyName,
    const matlab::data::Array &propertyValue)
FutureResult<void> setPropertyAsync(matlab::data::Array &object,
 const std::u16string &propertyName,
 const matlab::data::Array &propertyValue)

Описание

Установите значение свойства объекта асинхронно. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите задать.

Параметры

matlab::data::Array &objectArray

Массив объектов MATLAB

matlab::data::Array &object

Скалярный объект MATLAB

size_t index

Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого задано

const std::u16string &propertyName

Имя свойства, которое нужно задать. Задайте имя как std::u16string. Кроме того, можно задать этот параметр как std::string.

const matlab::data::Array &propertyValue

Значение, присвоенное свойству.

Исключения

Ничего

Классы исключений

ИсключениеПричина

matlab::engine::EngineException

В функции есть ошибка времени выполнения MATLAB, или MATLAB не запускается.

matlab::engine::MATLABSyntaxException

В функции MATLAB имеется синтаксическая ошибка.

matlab::engine::MATLABExecutionException

В функции или инструкции MATLAB существует ошибка времени выполнения оператор.

matlab::engine::TypeConversionException

Результат функции MATLAB не может быть преобразован в заданный тип

Для получения дополнительной информации смотрите Catch Exceptions в MEX-функция

Похожие темы