После создания файла определения
с помощью 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