Разделяемый интерфейс библиотеки поддерживает весь стандартный скаляр C типы. Следующая таблица показывает эти типы C с их эквивалентными типами MATLAB®. MATLAB использует тип от правого столбца для аргументов, показывающих тип C в левом столбце.
Все скалярные значения, возвращенные MATLAB, имеют тип double
.
Типы примитивов MATLAB
C тип | Эквивалентный тип MATLAB |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long (Windows) |
|
unsigned long (Linux) |
|
|
|
|
|
| Массив |
| массив ячеек из символьных векторов |
Следующая таблица показывает, как MATLAB сопоставляет указатели C (столбец 1) с эквивалентной подписью функции MATLAB (столбец 2). Обычно, можно передать переменную от Эквивалентного столбца Типа MATLAB до функций с соответствующим Типом данных Аргумента. Смотрите Аргументы Указателя в Функциях C для получения информации о том, когда использовать объект lib.pointer
вместо этого.
MATLAB расширенные типы
C тип указателя | Аргумент Тип данных | Эквивалентный Тип MATLAB | Функция, взятая в качестве примера, в |
---|---|---|---|
|
| 'double' | addDoubleRef |
|
| единственный | |
|
|
| multiplyShort |
|
| int8 | |
|
| Массив | stringToUpper |
|
| массив ячеек из символьных векторов | |
enum |
| ||
|
| Объект | allocateStruct |
|
| deallocateStruct | |
|
| Объект | |
| структура | MATLAB | addStructFields |
|
| Массив MATLAB | |
|
| Объект |
Вот вещи отметить об аргументах ввода и вывода, показанных в подписях функции MATLAB.
Много аргументов (как int32
и double
) подобны их дубликатам C. В этих случаях передайте в типах MATLAB, показанных для этих аргументов.
Некоторые аргументы C (например, **double
или предопределенные структуры), отличаются от стандартных типов MATLAB. В этих случаях, или передать стандартный тип MATLAB и позволить MATLAB преобразовать его для вас, или преобразовывают данные самих с помощью функций MATLAB libstruct
и libpointer
. Для получения дополнительной информации смотрите, Вручную Преобразовывают Данные, пройден в Функции.
C функции часто возвращают данные во входных параметрах, переданных ссылкой. MATLAB задает дополнительные выходные аргументы, чтобы возвратить эти значения. Входные параметры, заканчивающиеся в Ptr
или PtrPtr
, также перечислены как выходные параметры.
Для примера подписей функции MATLAB смотрите Разделяемую Библиотеку shrlibsample.
Нескалярные аргументы должны быть объявлены, как передано ссылкой в библиотечных функциях.
Если библиотечная функция использует единственную нижнюю индексацию, чтобы сослаться на двумерную матрицу, имейте в виду что строка матриц процесса программ C строкой. Матрицы процессов MATLAB столбцом. Чтобы получить поведение C от функции, транспонируйте входную матрицу прежде, чем вызвать функцию, и затем транспонируйте функциональный вывод.
Используйте пустой массив, []
, чтобы передать параметр NULL
библиотечной функции, которая поддерживает дополнительные входные параметры. Это обозначение допустимо только, когда аргумент объявляется как Ptr
или PtrPtr
как показано libfunctions
или libfunctionsview
.
Можно создать указатель NULL
, чтобы передать библиотечным функциям следующими способами:
Передайте пустой массив []
в качестве аргумента.
Используйте функцию libpointer
:
p = libpointer; % no arguments
p = libpointer('string') % string argument
p = libpointer('cstring') % pointer to a string argument
Используйте функцию libstruct
:
p = libstruct('structtype'); % structure type
Пустой Объект libstruct
Чтобы создать пустой объект libstruct
, вызовите libstruct
с только аргументом structtype
. Например:
sci = libstruct('c_struct')
get(sci)
p1: 0 p2: 0 p3: 0
MATLAB отображает инициализированные значения.
При большинстве условий программное обеспечение MATLAB автоматически преобразовывает данные, переданные и от внешних библиотечных функций до типа, ожидаемого внешней функцией. Однако вы можете принять решение преобразовать свои данные аргумента вручную. Например:
При передаче тех же данных серии библиотечных функций преобразуйте его, если вручную прежде, чем вызвать первую функцию вместо того, чтобы иметь MATLAB преобразовывают его автоматически на каждом вызове. Эта стратегия сокращает количество ненужной копии и операций преобразования.
При передаче больших структур сохраните память путем создания структур MATLAB, которые совпадают с формой структур C, используемых в функции вместо того, чтобы использовать типичные структуры MATLAB. Функция libstruct
создает структуру MATLAB, смоделированную из структуры C, взятой от библиотеки.
То, когда аргумент к внешней функции использует больше чем один уровень ссылки (например, double **
), передайте указатель, создало использование функции libpointer
вместо того, чтобы полагаться на MATLAB, чтобы преобразовать тип автоматически.
libfunctions
| libfunctionsview
| libpointer
| libstruct