Примечание
API C++ MEX несовместим с API C MEX, описанным в приложении C MEX File Applications. Нельзя смешивать эти API в файле MEX.
C++ MEX API позволяет создавать приложения, использующие преимущества функций C++ 11, такие как семантика перемещения, обработка исключений и управление памятью .
matlab::mex::Function | Базовый класс для функций C++ MEX |
matlab::mex::ArgumentList | Контейнер для входов и выходов функций C++ MEX |
matlab::engine::MATLABEngine | Класс, определяющий 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). |
Доступ к функциям, переменным и объектам MATLAB ® с помощью matlab::engine::MATLABEngine API описан в следующих разделах. Для вызова matlab::engine::MATLABEngine функции, получить общий указатель, который возвращается matlab::mex::Function::getEngine функция. Например:
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
Этот указатель используется для вызова функций механизма. Например:
matlabPtr->feval(...);
Функции обработчика вызовов только в том же потоке, что и MexFunction класс.
| matlab:: двигатель:: MATLABEngine:: feval | Вызов функций MATLAB с аргументами |
| matlab:: двигатель:: MATLABEngine:: fevalAsync | Вызовите функцию MATLAB с аргументами и возвращенными значениями асинхронно. |
| matlab:: двигатель:: MATLABEngine:: eval | Оценка операторов MATLAB в базовой рабочей области |
| matlab:: двигатель:: MATLABEngine:: evalAsync | Асинхронная оценка инструкций MATLAB в базовой рабочей области |
| matlab:: engine:: MATLABEngine:: getVariable | Получение переменных из базы MATLAB или глобальной рабочей области |
| matlab:: engine:: MATLABEngine:: getVariiveAsync | Асинхронное получение переменных из базы MATLAB или глобальной рабочей области |
| matlab:: двигатель:: MATLABEngine:: setVariable | Поместить переменные в базовую или глобальную рабочую область MATLAB |
| matlab:: engine:: MATLABEngine:: setVariiveAsync | Помещать переменные в базовую или глобальную рабочую область MATLAB асинхронно |
| matlab:: engine:: MATLABEngine:: getProperty | Получить свойство объекта |
| matlab:: engine:: MATLABEngine:: getPropertyAsync | Асинхронное получение свойства объекта |
| matlab:: двигатель:: MATLABEngine:: setProperty | Задать свойство объекта |
| matlab:: engine:: MATLABEngine:: setPropertyAsync | Асинхронное задание свойства объекта |
matlab::engine::MATLABEngine::fevalstd::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.
Входы и выходы - это типы, определенные API данных MATLAB. Также существует синтаксис для поддержки собственных типов C++.
| Имя вычисляемой функции или сценария MATLAB. Укажите имя как |
| Количество возвращенных значений. |
| Несколько входных аргументов для передачи функции MATLAB в |
| Одиночный входной аргумент для передачи функции MATLAB. |
| Буфер потока, используемый для хранения стандартных выходных данных функции MATLAB. |
| Буфер потока, используемый для хранения сообщения об ошибке из функции MATLAB. |
| Собственные типы данных C++, используемые для ввода функций. |
| Выходные данные, возвращенные функцией MATLAB. |
| Один выход, возвращенный функцией MATLAB. |
| Вывод, возвращенный функцией MATLAB в качестве пользовательского типа. Может быть |
| В функции имеется ошибка времени выполнения MATLAB. |
| Результат функции MATLAB не может быть преобразован в указанный тип. |
| Синтаксическая ошибка в функции MATLAB. |
Для получения дополнительной информации см. Вызов функций MATLAB из функций MEX
matlab::engine::MATLABEngine::fevalAsyncFutureResult<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::evalvoid 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::evalAsyncFutureResult<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::getVariablematlab::data::Array getVariable(const std::u16string &varName,
WorkspaceType workspaceType = WorkspaceType::BASE)Получение переменной из базовой или глобальной рабочей области MATLAB.
| Имя переменной в рабочей области MATLAB. Укажите имя как |
| Для получения переменной из рабочей области MATLAB (BASE или GLOBAL). Дополнительные сведения см. в разделе |
| Переменная, полученная из базы MATLAB или глобальной рабочей области |
| Запрошенная переменная не существует в указанной базовой или глобальной рабочей области MATLAB. |
Дополнительные сведения см. в разделе Установка и получение переменных MATLAB из MEX
matlab::engine::MATLABEngine::getVariableAsyncFutureResult<matlab::data::Array> getVariableAsync(const std::u16string &varName,
WorkspaceType workspaceType = WorkspaceType::BASE)Асинхронное получение переменной из базовой или глобальной рабочей области MATLAB.
| Имя переменной в рабочей области MATLAB. Укажите имя как |
| Для получения переменной из рабочей области MATLAB (BASE или GLOBAL). Дополнительные сведения см. в разделе |
| A |
Ничего
matlab::engine::MATLABEngine::setVariablevoid 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::setVariableAsyncFutureResult<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::getPropertymatlab::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::getPropertyAsyncmatlab::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::setPropertyvoid 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::setPropertyAsyncFutureResult<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. |
| Результат функции MATLAB не может быть преобразован в указанный тип |
Дополнительные сведения см. в разделе Исключения Catch в функции MEX