Задайте интерфейс MATLAB к библиотеке C++

После создания файла определения definelibName.mlx с помощью clibgen.generateLibraryDefinition вам придется изменить содержимое в порядке включать функциональность в интерфейс. Используйте Live Editor, чтобы изменить файл.

Примечание

Если функциональность библиотеки отсутствует в файле определения, библиотека может содержать неподдерживаемые функции языка или неподдерживаемые типы данных. Для получения дополнительной информации повторно выполните clibgen.generateLibraryDefinition с набором опции 'Verbose' к истине.

Предложения кода для пользовательских параметров

MATLAB® предлагает предложения кода для значений пользовательских параметров. Активировать предложения для определенного параметра:

  • Не прокомментируйте код, задающий функцию.

  • Удалите параметр, включая символы <>. Подсветите параметр, нажмите клавишу Delete дважды, затем ключ Backspace.

  • Сделайте паузу, чтобы позволить предложениям кода отображаться.

  • Если предложения не появляются, проверяйте, что файл definelibName.mlx находится на вашем пути MATLAB.

Параметр DIRECTION

На C++ аргументы указателя могут использоваться, чтобы передать и возвратить данные из функции. Используйте параметр DIRECTION, чтобы задать, является ли аргумент входом только для чтения, вывод только или модифицируемый входной параметр.

Параметр DIRECTION имеет одно из этих значений.

  • входной параметр- Входной параметр только

    Если аргумент указателя используется, чтобы передать данные функции, то это должно появиться как входной параметр в подписи MATLAB.

  • вывод - Выходной аргумент только

    Если аргумент указателя используется, чтобы получить данные от функции, то это должно появиться как выходной аргумент в подписи MATLAB.

  • inputoutput - Аргумент ввода и вывода

    Если аргумент указателя используется, чтобы и передать и возвратить данные, то это должно появиться и как входной параметр и как выходной аргумент.

Например, предположите, что функция C++ passData имеет следующую подпись. Аргумент data может быть входом к функции, возвращаемому значению функции, или ввести это, функция изменяет и возвращается. Документация функции говорит вам, как функция использует аргумент data.

void passData(double *data); 

Принятие data является скалярным двойным значением, следующая таблица показывает подпись MATLAB на основе своей роли.

Подпись C++Подпись MATLAB
// Pass data to C++ 
void passData(double *data); 
% Set DIRECTION = input
passData(data) 
// Return data from C++ 
void passData(double *data); 
% Set DIRECTION = output
[data] = passData() 
// Pass data to C++ and return the modified value 
void passData(double *data); 
% Set DIRECTION = inputoutput
[data] = passData(data) 

Параметр SHAPE

На C++ аргументы указателя используются и для скалярных данных и для данных массива. Чтобы использовать указатель в качестве массива, информация о размерности требуется, чтобы преобразовывать массив между C++ и MATLAB. Параметр SHAPE задает размерности для указателя.

Следующие примеры построений, заданных в заголовочном файле cppUseCases.hpp, показывают вам, как задать форму аргумента. В этих таблицах описания для функций в столбце C++ Signature основаны на принятом знании аргументов. Сама подпись не предоставляет эту информацию.

Задайте аргумент указателя к фиксированному скаляру

Подпись C++Значения defineArgument

Вход, чтобы функционировать readScalarPtr является скалярным указателем in.

void readScalarPtr(const int * in)

Для аргумента in, набор SHAPE к 1.

defineArgument(readScalarPtrDefinition, "in", "int32", "input", 1);

Вход, чтобы функционировать readScalarPtr является скалярным указателем, чтобы классифицировать ns::Myclass2.

void readScalarPtr(const ns::Myclass2 * in)

Для аргумента in, набор SHAPE к 1.

defineArgument(readScalarPtrDefinition, "in", "clib.cppUseCases.ns.myclass2", "input", 1);

Задайте аргумент указателя

Подпись C++Значения defineArgument

Вход, чтобы функционировать readMatrix1DPtr является указателем на целочисленный массив длины m.

void readMatrix1DPtr(const int * mat,size_t m)

Для аргумента mat, набор SHAPE к аргументу m.

defineArgument(readMatrix1dPtrDefinition, "mat", "int32", "input", "m");

Вход, чтобы функционировать readMatrix1DPtrFixedSize является указателем на массив фиксированной длины mat.

void readMatrix1DPtrFixedSize(const int * mat)

Для аргумента mat, набор SHAPE к фиксированному целому числу, такой как 5.

defineArgument(readMatrix1dPtrFixedSizeDefinition, "mat", "int32", "input", 5);

Вход, чтобы функционировать readMatrix2DPtr является указателем на двумерную целочисленную матрицу mat размера m-by-n.

void readMatrix2DPtr(const int * mat,
    size_t m,size_t n)

Для аргумента mat, набор SHAPE к ["m","n"].

defineArgument(readMatrix2dPtrDefinition, "mat", "int32", "input", ["m","n"]);

Вход, чтобы функционировать readMatrix2DPtrFixedSize является указателем на двумерный матричный mat фиксированных размерностей.

void readMatrix2DPtrFixedSize(const int * mat)

Для аргумента mat, набор SHAPE к фиксированному целому числу, такой как 6.

defineArgument(readMatrix2dPtrFixedSizeDefinition, "mat", "int32", "input", 6);

Вход, чтобы функционировать readMatrix3DPtr является указателем на 3D матричный mat размера m-by-n-by-p.

void readMatrix3DPtr(const int * mat,
    size_t m,size_t n,size_t p)

Для аргумента mat, набор SHAPE к ["m","n","p"].

defineArgument(readMatrix3dPtrDefinition, "mat", "int32", "input", ["m","n","p"]);

Задайте аргумент Array

Подпись C++Значения defineArgument

Вход, чтобы функционировать readMatrix1DArr является одномерным массивом mat длины m.

void readMatrix1dArr(int const [] mat,int m)

Для аргумента mat, набор SHAPE к длине m.

defineArgument(readMatrix1dArrDefinition, "mat", "int32", "input", "m");

Выходной Define аргумент указателя

Подпись C++Значения defineArgument

Вход, чтобы функционировать getRandomValues является указателем на массив длины len, который возвращает аргумент указателя, как выведено.

int * getRandomValues(size_t len)

Для возвращаемого значения RetVal, набор SHAPE к аргументу len.

defineOutput(getRandomValuesDefinition, "RetVal", "int32", "len");

Выходным аргументом функционального getRandomValuesFixedSize является указатель на массив фиксированной длины.

int * getRandomValuesFixedSize()

Для возвращаемого значения RetVal, набор SHAPE к целому числу, такой как 5.

defineOutput(getRandomValuesFixedSizeDefinition, "RetVal", "int32", 5);

Задайте скалярный аргумент объекта

Подпись C++Значения defineArgument

Вход, чтобы функционировать addClassByPtr является указателем, чтобы классифицировать ns::Myclass2.

double addClassByPtr(const ns::Myclass2 * myc1)

Для аргумента myc1, набор SHAPE к 1.

defineArgument(addClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1);

Вход, чтобы функционировать updateClassByPtr является указателем, чтобы классифицировать ns::myclass2.

void updateClassByPtr(ns::myclass2 * myc1,
    double a,short b,long c)

Для аргумента myc1, набор SHAPE к 1.

defineArgument(updateClassByPtrDefinition,"myc1","clib.cppUseCases.ns.myclass2","inputoutput",1);

Вход, чтобы функционировать readClassByPtr является указателем, чтобы классифицировать ns::myclass2.

void readClassByPtr(ns::myclass2 * myc1)

Для аргумента myc1, набор SHAPE к 1.

defineArgument(readClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1);

Вход, чтобы функционировать fillClassByPtr является указателем, чтобы классифицировать ns::myclass2.

void fillClassByPtr(ns::myclass2 * myc1,
    double a,short b,long c)

Для аргумента myc1, набор SHAPE к 1.

defineArgument(fillClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1);

Задайте матричный аргумент

Подпись C++Значения defineArgument

Вход, чтобы функционировать updateMatrix1DPtrByX является указателем на целочисленный вектор длины m. Аргумент x изменяет входной параметр.

void updateMatrix1DPtrByX(int * mat,int m,int x)

Для аргумента mat, набор DIRECTION к inputoutput и SHAPE к m.

defineArgument(updateMatrix1dPtrByXDefinition, "mat", "int32", "inputoutput", "m");

Вход, чтобы функционировать updateMatrix1DArrByX является ссылкой на целочисленный массив длины m. Входной параметр изменяется x.

void updateMatrix1DArrByX(int [] mat,
    int m,int x)

Для аргумента mat, набор DIRECTION к inputoutput и SHAPE к m.

defineArgument(updateMatrix1dArrByXDefinition, "mat", "int32", "inputoutput", "m");

Вход, чтобы функционировать addValuesByPtr является указателем на целочисленный вектор длины len. Функция не изменяет входной параметр.

int addValuesByPtr(int * mat,size_t len)

Для аргумента mat, набор DIRECTION к input и SHAPE к len.

defineArgument(addValuesByPtrDefinition, "mat", "int32", "input", "len");

Вход, чтобы функционировать addValuesByArr является ссылкой на целочисленный массив длины len. Функция не изменяет входной параметр.

int addValuesByArr(int [] mat,size_t len)

Для аргумента mat, набор DIRECTION к input и SHAPE к len.

defineArgument(addValuesByArrDefinition, "mat", "int32", "input", "len");

Функциональный fillRandomValuesToPtr создает целочисленный вектор длины len и возвращает ссылку на вектор.

void fillRandomValuesToPtr(int * mat,size_t len)

Для аргумента mat, набор DIRECTION к output и SHAPE к len.

defineArgument(fillRandomValuesToPtrDefinition, "mat", "int32", "output", "len");

Функциональный fillRandomValuesToArr создает целочисленный вектор длины len и возвращает ссылку на вектор.

void fillRandomValuesToArr(int [] mat,
    size_t len)

Для аргумента mat, набор DIRECTION к output и SHAPE к len.

defineArgument(fillRandomValuesToArrDefinition, "mat", "int32", "output", "len");

Задайте аргументы строки

Подпись C++Значения defineArgument

Вход, чтобы функционировать getStringCopy является отключенной пустым указателем строкой.

const char * getStringCopy(const char * str)

Для аргумента str, набор MLTYPE к string и SHAPE к nullTerminated.

defineArgument(getStringCopyDefinition, "str", "string", "input", "nullTerminated");

Вход, чтобы функционировать readCharArray является строкой, заданной длиной len.

void readCharArray(const char * chArray,
    size_t len)

Для аргумента chArray, набор MLTYPE к char и SHAPE к len.

defineArgument(readCharArrayDefinition, "chArray", "char", "input", "len");

Вход, чтобы функционировать readInt8Array является массивом типа int8 и длина len.

void readInt8Array(const char * int8Array,
    size_t len)

Для аргумента int8Array, набор MLTYPE к int8 и SHAPE к len.

defineArgument(readInt8ArrayDefinition, "int8Array", "int8", "input", "len");

Возвращаемое значение для функционального getRandomCharScalar является скаляром символов.

const char * getRandomCharScalar()

Для возвращаемого значения RetVal, набор MLTYPE к char и SHAPE к 1.

defineOutput(getRandomCharScalarDefinition, "RetVal", "char", 1);

Типом возвращаемого значения для функционального getRandomInt8Scalar является int8.

const char * getRandomInt8Scalar()

Для возвращаемого значения RetVal, набор MLTYPE к int8 и SHAPE к 1.

defineOutput(getRandomInt8ScalarDefinition, "RetVal", "int8", 1);

Функциональный updateCharArray обновляет входной параметр chArray. Длиной chArray является len.

void updateCharArray(char * chArray,
    size_t len)

Для аргумента chArray, набор DIRECTION к inputoutput и SHAPE к len.

defineArgument(updateCharArrayDefinition, "chArray", "int8", "inputoutput", "len");

Задайте введенные аргументы указателя

Подпись C++Значения defineArgument

Вход, чтобы функционировать useTypedefPtr является указателем на определение типа intDataPtr.

void useTypedefPtr(intDataPtr input1)

intDataPtr задан как:

typedef int16_t intData;
typedef intData * intDataPtr;

Для аргумента input1, набор DIRECTION к input и SHAPE к 1.

defineArgument(useTypedefPtrDefinition, "input1", "int16", "input", 1);

Параметр MLTYPE

MATLAB автоматически преобразовывает типы C++ в типы MATLAB, как описано в MATLAB к Отображению Типа данных C++. Если тип C++ для аргумента является строкой, то используйте эти опции, чтобы выбрать значения для аргументов MLTYPE и SHAPE.

Тип C++MLTYPEОпции для SHAPE
char *

int8

Скалярное значение
Массив скалярных значений

const char *

char

Скалярное значение
Массив скалярных значений

string

"nullTerminated"

Создайте библиотеку и рассмотрите содержимое

Создайте библиотеку libName.

build(definelibName)
addpath libName

Отобразите функциональность в библиотеке.

libDef = definelibName;
summary(libDef)

Примечание

Объект Saving LibraryDefinition libDef в MAT-файл не поддержан.

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

|

Похожие темы