Опубликуйте интерфейс к библиотеке C++ только для заголовка

Этот пример создает интерфейс MATLAB® к библиотеке C++ под названием school. Библиотека задана в заголовочном файле school.hpp и не имеет совместно использованного файла библиотеки. Библиотека, заданная полностью ее заголовочным файлом, называется библиотекой header-only. Если ваша библиотека включает совместно использованный файл библиотеки, то смотрите, Публикуют Интерфейс к Разделяемой Библиотеке C++ по Windows или Публикуют Интерфейс к Разделяемой Библиотеке C++ по Linux.

Эта библиотека задает классы, представляющие студентов и учителей. После того, как вы опубликуете эту библиотеку, пользователи MATLAB могут вызвать функции в clib.school пакет, чтобы создать Student и Teacher объекты и задают имена и возрасты.

Проверьте выбранный компилятор C++

Проверьте, что вы выбрали компилятор 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')
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 construct(s) require(s) additional definition. To include these construct(s) in the interface, 
edit the definitions in defineschool.mlx.
Build using build(defineschool).

Задайте Недостающую информацию для функции C++ getName

MATLAB сообщает, что одно построение запрашивает дополнительную информацию (определение). Это означает, что MATLAB не может автоматически задать подпись для одной из функций. Чтобы предоставить недостающую информацию, щелкните по ссылке, чтобы открыть defineschool.mlx в Live Editor MATLAB.

Построения с недостающей информацией комментируются. Просмотрите файл путем прокрутки, чтобы расположиться, раздел назвал "функцию C++ getName с clib.school.getName имени MATLAB". Не прокомментируйте операторы в getName секция кода.

Входной параметр p скалярное значение. Замените <SHAPE> в этом операторе с номером 1:

defineArgument(getNameDefinition, "p", "clib.school.Person", "input", <SHAPE>);
defineArgument(getNameDefinition, "p", "clib.school.Person", "input", 1);

Сохраните файл определения.

Для получения дополнительной информации о включении построений в интерфейсе, смотрите, Задают Недостающую информацию для Подписей MATLAB.

Интерфейс сборки и добавляет к пути 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 интерфейс, используйте clib MATLAB пакет. Введите пакет nameclib.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.

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

| | |

Похожие темы