В этом примере создается интерфейс MATLAB ® с библиотекой C++ с именемschool. Библиотека определяется в файле заголовка school.hpp и не имеет файла общей библиотеки. Библиотека, полностью определенная своим файлом заголовка, называется библиотекой только заголовка. Если библиотека содержит файл общей библиотеки, см. раздел Публикация интерфейса в общую библиотеку 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).
getNameMATLAB сообщает, что одна конструкция требует дополнительной информации (определения). Это означает, что MATLAB не может автоматически определить подпись для одной из функций. Чтобы предоставить недостающую информацию, щелкните ссылку, чтобы открыть defineschool.mlx в интерактивном редакторе MATLAB.
Конструкции с отсутствующей информацией комментируются. Прокрутите файл, чтобы найти раздел «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') 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