Этот пример создает MATLAB® интерфейс к библиотеке C++ с именем school. Библиотека определяется в заголовочном файле school.hpp и не имеет общего файла библиотеки. Библиотека, полностью заданная ее заголовочным файлом, называется header-only библиотекой. Если библиотека содержит файл общей библиотеки, см. раздел Публикация интерфейса в библиотеке общего C++ в Windows или Публикация интерфейса в библиотеке общего C++ в Linux.
Эта библиотека определяет классы, представляющие студентов и преподавателей. После публикации этой библиотеки пользователи MATLAB могут вызывать функции в clib.school упаковать для создания Student и Teacher объекты и задавать имена и возраста.
Убедитесь, что вы выбрали компилятор C++. Обновленный список поддерживаемых компиляторов см. в Поддерживаемые и совместимые компиляторы. Этот пример использует компилятор MinGW64.
mex -setup cpp
Скопируйте school.hpp заголовочный файл в папку с возможностью записи на вашем пути. Этот пример принимает, что текущая папка H:\Documents\MATLAB\publisher.
copyfile(fullfile(matlabroot,'extern','examples','cpp_interface','school.hpp'),'.','f')
Используйте clibgen.generateLibraryDefinition функция для создания файла определения библиотеки defineschool.mlx.
clibgen.generateLibraryDefinition('school.hpp')Using MinGW64 Compiler (C++) compiler. Generated definition file defineschool.mlx and data file 'schoolData.xml' contain definitions for 21 constructs supported by MATLAB. 1 construct(s) require(s) additional definition. To include these construct(s) in the interface, edit the definitions in defineschool.mlx. Build using build(defineschool).
getName C++MATLAB сообщает, что одна конструкция требует дополнительной информации (определения). Это означает, что MATLAB не может автоматически задать подпись для одной из функций. Чтобы предоставить недостающую информацию, щелкните ссылку для открытия defineschool.mlx в MATLAB Live Editor.
Конструкции с отсутствующей информацией комментируются. Прокрутите файл, чтобы найти раздел под названием «Функция C++ getName с именем MATLAB clib.school.getName». Раскомментируйте операторы в getName секция кода.
Входной параметр p является скалярным значением. Замените <SHAPE> в этом операторе с номером 1:
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);
Сохраните файл определения.
Проверьте библиотеку.
defineschool;
Для получения дополнительной информации о включении конструкций в интерфейс смотрите Задать отсутствующую информацию для сигнатур MATLAB.
Вызовите build функция для создания файла интерфейса schoolInterface.dll в H:\Documents\MATLAB\publisher\school папка.
build(defineschool)
Building interface file 'schoolInterface.dll'. Interface file 'schoolInterface.dll' built in folder 'H:\Documents\MATLAB\publisher\school'. To use the library, add the interface file folder to the MATLAB path.
Нажмите на interface file folder ссылка для добавления интерфейса к пути. Кроме того, введите:
addpath('school')The summary метод отображает сводные данные классов и функций C++, определенных в school интерфейс.
summary(defineschool)
MATLAB Interface to school Library
Class clib.school.Person
Constructors:
clib.school.Person()
clib.school.Person(string,uint64)
clib.school.Person(clib.school.Person)
Methods:
setName(string)
setAge(uint64)
string getName()
uint64 getAge()
No Properties defined
Class clib.school.Teacher
Constructors:
clib.school.Teacher()
clib.school.Teacher(string,uint64)
clib.school.Teacher(clib.school.Teacher)
Methods:
string getName()
No Properties defined
Class clib.school.Student
Constructors:
clib.school.Student()
clib.school.Student(string,uint64)
clib.school.Student(clib.school.Student)
Methods:
string getName()
No Properties defined
Functions
string clib.school.getName(clib.school.Person)Вызов функциональности в school интерфейс, используйте MATLAB clib пакет. Введите имя пакета clib.school, заканчивающийся точкой. Можно нажать Tab, чтобы увидеть три класса и одну функцию, определенные в библиотеке.
Примечание
Если вы используете класс или функцию библиотеки, вы не можете изменить определение библиотеки, если не перезапустите MATLAB и не перестроите библиотеку.
Создайте учителя.
t1 = clib.school.Teacher('Ms. Jones',24);Использование getName отображение имени учителя.
getName(t1)
ans = "Ms. Jones"
Вы можете предоставить текст справки для своих пользователей. Для получения дополнительной информации см. раздел «Публикация текста справки для интерфейса MATLAB в библиотеке C++».
Чтобы предоставить интерфейс другому пользователю MATLAB, проинструктируйте их добавить schoolInterface.dll файл в папку с именем school и добавьте папку в путь MATLAB. Имя пакета clib.school.
build | clibgen.buildInterface | clibgen.generateLibraryDefinition | summary