Примечание
MATLAB® предоставляет API, который использует современную семантику C++ и шаблоны проекта, MATLAB Data API. MathWorks рекомендует создание MEX-функций с этим API. Для получения дополнительной информации смотрите Приложения C++ MEX.
Если ваши MEX-функции должны выполняться в MATLAB R2017b или ранее, то необходимо использовать функции API C Matrix в приложениях C++. MEX-функции, созданные с помощью API C Matrix, поддерживают все стандарты языка C++. В этом разделе рассматриваются специфические проблемы языка C++, которые необходимо учитывать при создании и использовании файлов MEX.
Примеры кода MATLAB C можно использовать в приложениях C++. Для получения примера смотрите mexcpp.cpp в примере класса C++, который содержит операторы C и C++.
Примеры исходного кода MATLAB C++ используют .cpp расширение файла. Внутренний номер .cpp однозначен и распознан компиляторами C++. Другие возможные расширения включают .C, .cc, и .cxx.
Чтобы создать файл MEX на C++, введите:
mex filename.cpp
где filename - имя файла исходного кода в пути MATLAB.
Запускать файл C++ MEX можно только в системах с той же версией MATLAB, на которой был скомпилирован файл.
Не используйте mxFree или mxDestroyArray функции в деструкторе C++ класса, используемого в MEX-функции. Если MEX-функция выдает ошибку, MATLAB очищает Файл MEX переменные, как описано в Автоматической очистке временных массивов в Файлы MEX.
Если возникает ошибка, из-за которой объект выходит из возможностей, MATLAB вызывает деструктор C++. Освобождение памяти непосредственно в деструкторе означает, что и MATLAB, и деструктор освобождают одну и ту же память, что может испортить память.
Использование cout или язык C printf функция не работает должным образом в файлах C++ MEX. Используйте mexPrintf вместо этого функция.
Файл MEX mexcpp.cpp показывает, как использовать код С++ с файлом MEX на C языке. В примере используются функции из API на C Matrix. Он использует функции представителей, конструкторы, деструкторы и iostream включить файл.
Функция задает класс myData с представителем функциями display и set_data, и переменные v1 и v2. Он создает объект d класса myData и отображает инициализированные значения v1 и v2. Затем он устанавливает v1 и v2 на ваш вход и отображает новые значения. Наконец, delete оператор очищает объект.
Чтобы создать этот пример, скопируйте файл в путь MATLAB и по типу командной строки:
mex mexcpp.cppСинтаксис вызова следующий mexcpp(num1, num2).
The mexatexit.cpp пример показывает функции обработки файлов C++. Сравните его с примером кода С mexatexit.c, который использует mexAtExit функция.
В примере C++ используется fileresource Класс для обработки функций открытия и закрытия файла. MEX-функция вызывает деструктор для этого класса, который закрывает файл данных. Этот пример также печатает сообщение на экране при выполнении операций с файлом данных. Однако в этом случае единственная выполненная операция файла - это операция записи, fprintf.
Чтобы создать mexatexit.cpp Файл MEX скопируйте файл в путь MATLAB и введите:
mex mexatexit.cppТип:
z = 'for the C++ MEX-file'; mexatexit(x) mexatexit(z) clear mexatexit
Writing data to file. Writing data to file.
Отображение содержимого matlab.data.
type matlab.datamy input string for the C++ MEX-file
Пример кода С регистрирует mexAtExit функция для выполнения задач очистки (закрытия файла данных) при очистке файла MEX. Этот пример печатает сообщение на экране, используя mexPrintf при выполнении файловых операций fopen, fprintf, и fclose.
Чтобы создать mexatexit.c Файл MEX скопируйте файл в путь MATLAB и введите:
mex mexatexit.cЗапустите пример.
x = 'my input string';
mexatexit(x)
Opening file matlab.data. Writing data to file.
Очистить файл MEX.
clear mexatexitClosing file matlab.data.
Отображение содержимого matlab.data.
type matlab.datamy input string