Разделяемый интерфейс библиотеки поддерживает весь стандартный скаляр 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 |
|
| single | |
|
| (u) int ( | multiplyShort |
|
| int8 | |
|
|
| stringToUpper |
|
| массив ячеек из символьных векторов | |
enum |
| ||
|
|
| allocateStruct |
|
| deallocateStruct | |
|
|
| |
| structure | 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