Примечание
Интерфейс 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 ). |
Доступ к 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++.
| Имя функции MATLAB или скрипта для оценки. Задайте имя как |
| Количество возвращенных значений. |
| Несколько входных параметров для передачи в функцию MATLAB в |
| Один входной параметр для передачи в функцию MATLAB. |
| Буфер потока, используемый для хранения стандартного выхода из функции MATLAB. |
| Буфер потока, используемый для хранения сообщения об ошибке от функции MATLAB. |
| Нативные типы данных C++, используемые для входных параметров функции. |
| Выходы, возвращенные от функции MATLAB. |
| Один выход возвращен из функции MATLAB. |
| Выход, возвращенный из функции MATLAB как заданный пользователем тип. Может быть |
| В функции есть ошибка времени выполнения MATLAB. |
| Результат функции MATLAB не может быть преобразован в заданный тип. |
| В функции 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.
| Имя функции MATLAB или скрипта для оценки. Задайте имя как |
| Количество возвращенных значений |
| Несколько входных параметров для передачи в функцию MATLAB в |
| Один входной параметр для передачи в функцию MATLAB. |
| Буфер потока, используемый для хранения стандартного выхода из функции MATLAB. |
| Буфер потока, используемый для хранения сообщения об ошибке от функции MATLAB. |
| Нативные типы данных C++, используемые для входных параметров функции. |
| A |
Ничего
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 как текстовую строку в рабочей области вызывающей функции.
| Выражение MATLAB для оценки |
| Буфер потока, используемый для хранения стандартных выходов из выражения MATLAB |
| Буфер потока, используемый для хранения сообщения об ошибке от команды MATLAB |
| В выражении MATLAB произошла ошибка времени выполнения. |
| Синтаксическая ошибка в выражении 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.
| Выражение MATLAB для оценки |
| Буфер потока, используемый для хранения стандартных выходов из выражения MATLAB. |
| Буфер потока, используемый для хранения сообщения об ошибке от команды MATLAB. |
| A |
Ничего
matlab::engine::MATLABEngine::getVariable
matlab::data::Array getVariable(const std::u16string &varName, WorkspaceType workspaceType = WorkspaceType::BASE)
Получите переменную из основы MATLAB или глобальной рабочей области.
| Имя переменной в рабочем пространстве MATLAB. Задайте имя как |
| Рабочее пространство MATLAB (BASE или GLOBAL), из которого можно получить переменную. Для получения дополнительной информации см. |
| Переменная, полученная из основы MATLAB или глобальной рабочей области |
| Запрошенная переменная не существует в указанной основе MATLAB или глобальной рабочей области. |
Для получения дополнительной информации смотрите Задать и Получить переменный MATLAB из MEX
matlab::engine::MATLABEngine::getVariableAsync
FutureResult<matlab::data::Array> getVariableAsync(const std::u16string &varName, WorkspaceType workspaceType = WorkspaceType::BASE)
Получите переменную из основы MATLAB или глобальной рабочей области асинхронно.
| Имя переменной в рабочем пространстве MATLAB. Задайте имя как |
| Рабочее пространство MATLAB (BASE или GLOBAL), из которого можно получить переменную. Для получения дополнительной информации см. |
| A |
Ничего
matlab::engine::MATLABEngine::setVariable
void setVariable(const std::u16string &varName, const matlab::data::Array &var, WorkspaceType workspaceType = WorkspaceType::BASE)
Поместите переменную в основу MATLAB или глобальную рабочую область. Если переменная с таким же именем существует в рабочем пространстве MATLAB, setVariable
перезаписывает его.
| Имя переменной, созданной в рабочем пространстве MATLAB. Задайте имя как |
| Значение переменной, которую нужно создать в рабочем пространстве MATLAB. |
| Рабочее пространство MATLAB (BASE или GLOBAL), в которую помещается переменная. Для получения дополнительной информации см. |
Для получения дополнительной информации смотрите Задать и Получить переменный 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
перезаписывает его.
| Имя переменной, созданной в рабочем пространстве MATLAB. Задайте имя как |
| Значение переменной, которую нужно создать в рабочем пространстве MATLAB |
| Поместите переменную в рабочую область MATLAB BASE или 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)
Получите значение свойства объекта. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого возвращается |
| Имя свойства. Задайте имя как |
| Значение именованного свойства |
| Свойство не существует. |
Для получения дополнительной информации смотрите Объекты 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)
Получите значение свойства объекта асинхронно. Если входной параметр объекта является массивом объектов, задайте индекс элемента массива, который соответствует объекту, значение свойства которого вы хотите получить.
| Массив объектов MATLAB |
| Скалярный объект MATLAB |
| Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого возвращается |
| Имя свойства. Задайте имя как |
|
|
Ничего
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 |
| Скалярный объект MATLAB |
| Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого задано |
| Имя свойства, которое нужно задать. Задайте имя как |
const matlab::data::Array &propertyValue | Значение, присвоенное свойству |
| Свойство не существует. |
Для получения дополнительной информации смотрите Объекты 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 |
| Скалярный объект MATLAB |
| Нулевой индекс в объектный массив, задающий объект в этом массиве, значение свойства которого задано |
| Имя свойства, которое нужно задать. Задайте имя как |
const matlab::data::Array &propertyValue | Значение, присвоенное свойству. |
Ничего
Исключение | Причина |
---|---|
| В функции есть ошибка времени выполнения MATLAB, или MATLAB не запускается. |
| В функции MATLAB имеется синтаксическая ошибка. |
| В функции или инструкции MATLAB существует ошибка времени выполнения оператор. |
| Результат функции MATLAB не может быть преобразован в заданный тип |
Для получения дополнительной информации смотрите Catch Exceptions в MEX-функция