API C++ MEX

Примечание

API C++ MEX не совместим с API MEX C. Вы не можете смешать эти API в файле MEX.

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

matlab::mex::FunctionБазовый класс для MEX-функций C++
matlab::mex::ArgumentListКонтейнер для вводов и выводов от MEX-функций C++
matlab::engine::MATLABEngineEngine 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 является полным спектром к базовому набору массивов. Поддержка объектов ArgumentList следующие функции.

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

Engine API для C++

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

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

Используйте этот указатель, чтобы вызвать функции механизма. Например:

matlabPtr->feval(...);

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

mATLABEngine:: MATLABEngine::Вызовите функции MATLAB с аргументами
mATLABEngine:: MATLABEngine::Вызовите функцию MATLAB с аргументами и возвращенными значениями асинхронно.
mATLABEngine:: MATLABEngine::Оцените выражения MATLAB в базовом рабочем пространстве
mATLABEngine:: MATLABEngine::Оцените выражения MATLAB в базовом рабочем пространстве асинхронно
mATLABEngine:: MATLABEngine::Получите переменные из основы MATLAB или глобальной рабочей области
mATLABEngine:: MATLABEngine::Получите переменные из основы MATLAB или глобальной рабочей области асинхронно
mATLABEngine:: MATLABEngine::Поместите переменные в основу MATLAB или глобальную рабочую область
mATLABEngine:: MATLABEngine::Поместите переменные в основу MATLAB или глобальную рабочую область асинхронно
mATLABEngine:: MATLABEngine::Получите свойство объекта
mATLABEngine:: MATLABEngine::Получите свойство объекта асинхронно
mATLABEngine:: MATLABEngine::Установите свойство объекта
mATLABEngine:: MATLABEngine::Установите свойство объекта асинхронно

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 с аргументами и возвращенными значениями асинхронно.

Параметры

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

Объект FutureResult раньше получал результат вызова функции MATLAB.

Исключения

'none'

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 как строку асинхронно.

Параметры

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

Объект FutureResult раньше ожидал завершения выражения MATLAB.

Исключения

'none'

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 (ОСНОВА или ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ), чтобы получить переменную из. Для получения дополнительной информации смотрите 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 (ОСНОВА или ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ), чтобы получить переменную из. Для получения дополнительной информации смотрите global.

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

matlab::engine::FutureResult

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

Исключения

'none'

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 (ОСНОВА или ГЛОБАЛЬНАЯ ПЕРЕМЕННАЯ), чтобы поместить переменную в. Для получения дополнительной информации смотрите 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 или ГЛОБАЛЬНУЮ рабочую область. Для получения дополнительной информации смотрите global.

Исключения

'none'

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, который используется, чтобы синхронизировать операцию.

Исключения

'none'

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

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

Исключения

'none'

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

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

matlab::engine::EngineException

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

matlab::engine::MATLABSyntaxException

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

matlab::engine::MATLABExecutionException

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

matlab::engine::TypeConversionException

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

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

Похожие темы