Интерфейс общей библиотеки поддерживает все стандартные скалярные типы C. В следующей таблице показаны эти типы C с их эквивалентным MATLAB® типы. MATLAB использует тип из правого столбца для аргументов с типом C, показанным в левом столбце.
Примечание
Все скалярные значения, возвращенные MATLAB, имеют тип double
.
Типы примитивов MATLAB
Тип C | Эквивалентный тип MATLAB |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long (Windows) |
|
unsigned long (Linux) |
|
|
|
|
|
|
|
| массив ячеек из векторов символов |
В следующей таблице показано, как MATLAB преобразует указатели на C (столбец 1) в эквивалентную сигнатуру функции MATLAB (столбец 2). Обычно можно передать переменную из столбца Equivalent MATLAB Type в функции с соответствующим типом данных аргумента. Смотрите аргументы указателя в функциях 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 см. в разделе Sharibsample Общей библиотеки.
Нескалярные аргументы должны быть объявлены как переданные по ссылке в функциях библиотеки.
Если функция библиотеки использует индексацию одинарного индекса для ссылки на двумерную матрицу, имейте в виду, что 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