Передайте аргументы разделяемым библиотечным функциям 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 **

typePtrPtr
Например, 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, чтобы преобразовать тип автоматически.

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

| | |

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

Больше о