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

Примечание

MATLAB® обеспечивает API, который использует современную семантику C++ и шаблоны разработки, MATLAB Data API. MathWorks рекомендует, чтобы вы создали MEX-функции с этим API. Для получения дополнительной информации см. Приложения C++ MEX.

Если ваши MEX-функции должны запуститься в MATLAB R2017b или ранее, то необходимо использовать Матричные API-функции C в приложениях C++. MEX-функции, созданные с Матричным API C, поддерживают все стандарты языка C++. Эта тема обсуждает определенные вопросы языка C++, чтобы рассмотреть при создании и использовании файлов MEX.

Можно использовать примеры кода С MATLAB в приложениях C++. Например, смотрите mexcpp.cpp в Примере Класса C++, который содержит и C и операторы C++.

Создание исходного файла C++

Примеры исходного кода C++ MATLAB используют .cpp расширение файла. Дополнительный .cpp однозначно и распознан компиляторами C++. Другие возможные расширения включают .Ccc , и .cxx.

Компиляция и соединение

Чтобы создать файл MEX C++, введите:

mex filename.cpp

где filename имя файла исходного кода, на вашем пути MATLAB.

Можно запустить файл MEX C++ только в системах с той же версией MATLAB, на котором был скомпилирован файл.

Факторы памяти для деструкторов класса

Не используйте mxFree или mxDestroyArray функции в деструкторе C++ класса используются в MEX-функции. Если MEX-функция выдает ошибку, MATLAB очищает переменные файла MEX, как описано в Автоматической Очистке Временных массивов в файлах MEX.

Если ошибка происходит, который вызывает объект выйти из осциллографа, MATLAB вызывает деструктор C++. Освобождение памяти непосредственно в деструкторе означает, что и MATLAB и деструктор освобождают ту же память, которая может повредить память.

Использование mexPrintf, чтобы Распечатать к Окну Команды MATLAB

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

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

Файл MEX mexcpp.cpp показывает, как использовать Код С++ с файлом MEX языка C. Пример использует функции от Матричного API C. Это использует функции членства, конструкторов, деструкторы и iostream включайте файл.

Функция задает класс myData с функциями членства display и set_data, и переменные v1 и v2. Это создает объект d из класса myData и отображает инициализированные значения v1 и v2. Это затем устанавливает v1 и v2 к вашему входу и отображениям новые значения. Наконец, delete оператор очищает объект.

Чтобы создать этот пример, скопируйте файл в путь MATLAB и в типе командной строки:

mex mexcpp.cpp

Синтаксисом вызова является mexcpp(num1, num2).

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

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

Пример C++

Пример C++ использует fileresource класс, чтобы обработать файл открывается и близкие функции. MEX-функция вызывает деструктор для этого класса, который закрывает файл данных. Этот пример также распечатывает сообщение на экране при выполнении операций на файле данных. Однако в этом случае единственная выполняемая операция файла C является операцией записи, 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

Смотрите также

|

Связанные примеры

Больше о