После создания файла определения
с помощью definelibName.mlx
clibgen.generateLibraryDefinition
вам придется изменить содержимое в порядке включать функциональность в интерфейс. Используйте Live Editor, чтобы изменить файл.
Если функциональность библиотеки отсутствует в файле определения, библиотека может содержать неподдерживаемые функции языка или неподдерживаемые типы данных. Для получения дополнительной информации повторно выполните clibgen.generateLibraryDefinition
с набором опции 'Verbose'
к истине.
MATLAB® предлагает предложения кода для значений пользовательских параметров. Активировать предложения для определенного параметра:
Не прокомментируйте код, задающий функцию.
Удалите параметр, включая символы <>
. Подсветите параметр, нажмите клавишу Delete дважды, затем ключ Backspace.
Сделайте паузу, чтобы позволить предложениям кода отображаться.
Если предложения не появляются, проверяйте, что файл
находится на вашем пути MATLAB.definelibName.mlx
Параметр 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 |
---|---|
Вход, чтобы функционировать void readScalarPtr(const int * in) | Для аргумента defineArgument(readScalarPtrDefinition, "in", "int32", "input", 1); |
Вход, чтобы функционировать void readScalarPtr(const ns::Myclass2 * in) | Для аргумента defineArgument(readScalarPtrDefinition, "in", "clib.cppUseCases.ns.myclass2", "input", 1); |
Задайте аргумент указателя
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать void readMatrix1DPtr(const int * mat,size_t m) | Для аргумента defineArgument(readMatrix1dPtrDefinition, "mat", "int32", "input", "m"); |
Вход, чтобы функционировать void readMatrix1DPtrFixedSize(const int * mat) | Для аргумента defineArgument(readMatrix1dPtrFixedSizeDefinition, "mat", "int32", "input", 5); |
Вход, чтобы функционировать void readMatrix2DPtr(const int * mat, size_t m,size_t n) | Для аргумента defineArgument(readMatrix2dPtrDefinition, "mat", "int32", "input", ["m","n"]); |
Вход, чтобы функционировать void readMatrix2DPtrFixedSize(const int * mat) | Для аргумента defineArgument(readMatrix2dPtrFixedSizeDefinition, "mat", "int32", "input", 6); |
Вход, чтобы функционировать void readMatrix3DPtr(const int * mat, size_t m,size_t n,size_t p) | Для аргумента defineArgument(readMatrix3dPtrDefinition, "mat", "int32", "input", ["m","n","p"]); |
Задайте аргумент Array
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать void readMatrix1dArr(int const [] mat,int m) | Для аргумента defineArgument(readMatrix1dArrDefinition, "mat", "int32", "input", "m"); |
Выходной Define аргумент указателя
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать int * getRandomValues(size_t len) | Для возвращаемого значения defineOutput(getRandomValuesDefinition, "RetVal", "int32", "len"); |
Выходным аргументом функционального int * getRandomValuesFixedSize() | Для возвращаемого значения defineOutput(getRandomValuesFixedSizeDefinition, "RetVal", "int32", 5); |
Задайте скалярный аргумент объекта
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать double addClassByPtr(const ns::Myclass2 * myc1) | Для аргумента defineArgument(addClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1); |
Вход, чтобы функционировать void updateClassByPtr(ns::myclass2 * myc1, double a,short b,long c) | Для аргумента defineArgument(updateClassByPtrDefinition,"myc1","clib.cppUseCases.ns.myclass2","inputoutput",1); |
Вход, чтобы функционировать void readClassByPtr(ns::myclass2 * myc1) | Для аргумента defineArgument(readClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1); |
Вход, чтобы функционировать void fillClassByPtr(ns::myclass2 * myc1, double a,short b,long c) | Для аргумента defineArgument(fillClassByPtrDefinition, "myc1", "clib.cppUseCases.ns.myclass2", "input", 1); |
Задайте матричный аргумент
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать void updateMatrix1DPtrByX(int * mat,int m,int x) | Для аргумента defineArgument(updateMatrix1dPtrByXDefinition, "mat", "int32", "inputoutput", "m"); |
Вход, чтобы функционировать void updateMatrix1DArrByX(int [] mat, int m,int x) | Для аргумента defineArgument(updateMatrix1dArrByXDefinition, "mat", "int32", "inputoutput", "m"); |
Вход, чтобы функционировать int addValuesByPtr(int * mat,size_t len) | Для аргумента defineArgument(addValuesByPtrDefinition, "mat", "int32", "input", "len"); |
Вход, чтобы функционировать int addValuesByArr(int [] mat,size_t len) | Для аргумента defineArgument(addValuesByArrDefinition, "mat", "int32", "input", "len"); |
Функциональный void fillRandomValuesToPtr(int * mat,size_t len) | Для аргумента defineArgument(fillRandomValuesToPtrDefinition, "mat", "int32", "output", "len"); |
Функциональный void fillRandomValuesToArr(int [] mat, size_t len) | Для аргумента defineArgument(fillRandomValuesToArrDefinition, "mat", "int32", "output", "len"); |
Задайте аргументы строки
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать const char * getStringCopy(const char * str) | Для аргумента defineArgument(getStringCopyDefinition, "str", "string", "input", "nullTerminated"); |
Вход, чтобы функционировать void readCharArray(const char * chArray, size_t len) | Для аргумента defineArgument(readCharArrayDefinition, "chArray", "char", "input", "len"); |
Вход, чтобы функционировать void readInt8Array(const char * int8Array, size_t len) | Для аргумента defineArgument(readInt8ArrayDefinition, "int8Array", "int8", "input", "len"); |
Возвращаемое значение для функционального const char * getRandomCharScalar() | Для возвращаемого значения defineOutput(getRandomCharScalarDefinition, "RetVal", "char", 1); |
Типом возвращаемого значения для функционального const char * getRandomInt8Scalar() | Для возвращаемого значения defineOutput(getRandomInt8ScalarDefinition, "RetVal", "int8", 1); |
Функциональный void updateCharArray(char * chArray, size_t len) | Для аргумента defineArgument(updateCharArrayDefinition, "chArray", "int8", "inputoutput", "len"); |
Задайте введенные аргументы указателя
Подпись C++ | Значения defineArgument |
---|---|
Вход, чтобы функционировать void useTypedefPtr(intDataPtr input1)
typedef int16_t intData; typedef intData * intDataPtr; | Для аргумента defineArgument(useTypedefPtrDefinition, "input1", "int16", "input", 1); |
Параметр MLTYPE
MATLAB автоматически преобразовывает типы C++ в типы MATLAB, как описано в MATLAB к Отображению Типа данных C++. Если тип C++ для аргумента является строкой, то используйте эти опции, чтобы выбрать значения для аргументов
MLTYPE
и SHAPE
.
Тип C++ | MLTYPE | Опции для SHAPE |
---|---|---|
char * |
| Скалярное значение |
const char * |
| Скалярное значение |
|
|
Создайте библиотеку и рассмотрите содержимое
Создайте библиотеку
libName
.
build(definelibName)
addpath libName
Отобразите функциональность в библиотеке.
libDef = definelibName;
summary(libDef)
Примечание
Объект Saving LibraryDefinition
libDef
в MAT-файл не поддержан.
Смотрите также
build
| clibgen.LibraryDefinition
Похожие темы