Этот пример создает 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