Этот пример создает интерфейс MATLAB® к библиотеке C++ под названием school. Библиотека задана в заголовочном файле school.hpp.
Эта библиотека задает классы студентов и учителей по наименованию и возраста. После того, как вы опубликуете эту библиотеку, пользователи 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('school.hpp')Warning: Only header files specified; assuming this is a header-only library. If library files also need to be specified, use the 'Libraries' option. Using MinGW64 Compiler (C++) compiler. Generated definition file defineschool.mlx and data file 'schoolData.xml' contain definitions for 21 constructs supported by MATLAB. 1 constructs require additional definition. To include these constructs in the interface, edit the definitions in defineschool.mlx. Build using build(defineschool).
getNameMATLAB сообщает, что одно построение запрашивает дополнительную информацию (определение). Это означает, что MATLAB не может автоматически задать подпись для одной из функций. Чтобы предоставить недостающую информацию, щелкните по ссылке, чтобы открыть defineschool.mlx в Live Editor MATLAB.
Построения с недостающей информацией прокомментированы. Просмотрите файл путем прокрутки, чтобы расположиться, раздел назвал C++ function getName with MATLAB name clib.school.getName. Не прокомментируйте операторы в getName секция кода.
Измените этот оператор.
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
Замените <SHAPE> с номером 1 как это:
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);
Сохраните файл определения.
Для получения дополнительной информации о включении построений в интерфейсе, смотрите, Задают Интерфейс MATLAB к Библиотеке C++.
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(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 интерфейс, используйте clib MATLAB пакет. Ввод:
clib.school.
затем нажмите Tab. school библиотека имеет три класса и одну функцию.
Если вы используете класс библиотеки или функцию, вы не можете изменить определение библиотеки, если вы не перезапускаете MATLAB и восстанавливаете библиотеку.
Создайте учителя.
t1 = clib.school.Teacher('Ms. Jones',24);Отобразите имя учителя.
getName(t1)
ans = "Ms. Jones"
Можно предоставить текст справки пользователям. Для получения информации рассмотрите Справку Отображения темы для Интерфейса MATLAB к Библиотеке C++.
Чтобы дать интерфейс пользователю MATLAB, дайте им команду добавлять schoolInterface.dll файл к папке под названием school и добавьте папку в путь MATLAB. Именем пакета является clib.school.
build | clibgen.buildInterface | clibgen.generateLibraryDefinition