Интерфейс общей библиотеки поддерживает все стандартные скалярные типы 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 argumentp = 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: 0MATLAB отображает инициализированные значения.
В большинстве случаев программное обеспечение MATLAB автоматически преобразует данные, передаваемые во внешние библиотечные функции и из них, в тип, ожидаемый внешней функцией. Однако можно преобразовать данные аргумента вручную. Например:
При передаче одних и тех же данных в ряд библиотечных функций преобразуйте их вручную перед вызовом первой функции вместо автоматического преобразования MATLAB при каждом вызове. Эта стратегия сокращает количество ненужных операций копирования и преобразования.
При передаче больших структур следует экономить память путем создания структур MATLAB, соответствующих форме структур C, используемых в функции, вместо использования общих структур MATLAB. libstruct создает структуру MATLAB, смоделированную из структуры C, взятой из библиотеки.
Когда аргумент внешней функции использует более одного уровня ссылки (например, double **), передайте указатель, созданный с помощью libpointer вместо использования MATLAB для автоматического преобразования типа.
libfunctions | libfunctionsview | libpointer | libstruct