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

Этот пример создает интерфейс MATLAB® к библиотеке C++ под названием school. Библиотека задана в заголовочном файле school.hpp.

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

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

Проверьте, что вы выбрали компилятор 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).

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

MATLAB сообщает, что одно построение запрашивает дополнительную информацию (определение). Это означает, что 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++.

Интерфейс сборки и добавляет к пути MATLAB

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"

Измените текст справки

Можно предоставить текст справки пользователям. Для получения информации рассмотрите Справку Отображения темы для MATLABInterface к Библиотеке C++.

Распределите интерфейс

Чтобы дать интерфейс пользователю MATLAB, дайте им команду добавлять файл schoolInterface.dll в папку под названием school и добавлять папку в путь MATLAB. Именем пакета является clib.school.

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

| |

Похожие темы