Передайте аргументы разделяемым библиотечным функциям C

C и эквивалентные типы MATLAB

Разделяемый интерфейс библиотеки поддерживает весь стандартный скаляр C типы. Следующая таблица показывает эти типы C с их эквивалентными типами MATLAB®. MATLAB использует тип от правого столбца для аргументов, показывающих тип C в левом столбце.

Примечание

Все скалярные значения, возвращенные MATLAB, имеют тип double.

Типы примитивов MATLAB

C типЭквивалентный тип MATLAB

char, byte

int8

unsigned char, byte

uint8

short

int16

unsigned short

uint16

int

int32

long (Windows®)

int32,
long

long (Linux®)

int64,
long

unsigned int

uint32

unsigned long (Windows)

uint32,
long

unsigned long (Linux)

uint64,
long

float

single

double

double

char *

Массив char (1xn)

*char[]

массив ячеек из символьных векторов

Следующая таблица показывает, как MATLAB сопоставляет указатели C (столбец 1) с эквивалентной подписью функции MATLAB (столбец 2). Обычно, можно передать переменную от Эквивалентного столбца Типа MATLAB до функций с соответствующим Типом данных Аргумента. Смотрите Аргументы Указателя в Функциях C для получения информации о том, когда использовать объект lib.pointer вместо этого.

MATLAB расширенные типы

C тип указателяАргумент
Тип данных
Эквивалентный
Тип MATLAB

Функция, взятая в качестве примера, в
Разделяемая Библиотека shrlibsample

double *

doublePtr

doubleaddDoubleRef

float *

singlePtr

single 

intsize * (целочисленные типы указателей)

(u)int(size)Ptr
Например, int64 * становится int64Ptr.

(u)int(size)multiplyShort

byte[]

int8Ptr

int8 

char[] (отключенная пустым указателем строка, переданная значением)

cstring

Массив char (1xn)

stringToUpper

char ** (массив указателей на строки)

stringPtrPtr

массив ячеек из символьных векторов

 
enum

enumPtr

  

type **

type PtrPtr
Например, double **
становится doublePtrPtr.

Объект lib.pointer

allocateStruct

void *

voidPtr

 deallocateStruct

void **

voidPtrPtr

Объект lib.pointer

 

struct (структура C-стиля)

structure

MATLAB struct

addStructFields

mxArray *

MATLAB array

Массив MATLAB

 

mxArray **

MATLAB arrayPtr

Объект lib.pointer

 

Как подписи функции отображений 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, чтобы преобразовать тип автоматически.

Смотрите также

| | |

Связанные примеры

Больше о