Примечание
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.data
my 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 mexatexit
Closing file matlab.data.
Отображение содержимого matlab.data
.
type matlab.data
my input string