Создайте MEX-функции C++ с C Matrix API

Примечание

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++.

Создание исходного файла 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, и деструктор освобождают одну и ту же память, что может испортить память.

Использование mexPrintf для печати в Командное окно MATLAB

Использование cout или язык C printf функция не работает должным образом в файлах C++ MEX. Используйте mexPrintf вместо этого функция.

Пример класса C++

Файл 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).

Пример обработки файлов C++

The mexatexit.cpp пример показывает функции обработки файлов C++. Сравните его с примером кода С mexatexit.c, который использует mexAtExit функция.

Пример C++

В примере 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

Пример C

Пример кода С регистрирует 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

См. также

|

Похожие примеры

Подробнее о