主要内容

共享C库函数传递参数

C和MATLAB相同的类型

共享库接口支持所有标准C标量类型。金宝app下面的表显示了这些C类型等效MATLAB®类型。MATLAB使用右列的类型参数C类型显示在左边的列中。

请注意

所有由MATLAB返回标量值的类型

MATLAB原始类型

C类型 相当于MATLAB类型

字符,字节

int8

无符号字符,字节

uint8

int16

无符号短

uint16

int

int32

(Windows®)

int32,

(Linux®)

int64,

无符号整型

uint32

无符号长(窗口)

uint32,

无符号长(Linux)

uint64,

浮动

char *

字符数组(1 xn)

* char []

单元阵列的特征向量

下面的表显示了MATLAB地图C指针(第1列)相当于MATLAB函数签名(列2)。通常,您可以通过一个变量的等价的MATLAB函数与相应的参数数据类型列类型。看到在C函数指针参数对于何时使用的信息lib.pointer对象。

MATLAB扩展的类型

C指针类型 论点
数据类型
等效
MATLAB类型

例子函数
共享库shrlibsample

双*

doublePtr

addDoubleRef

浮*

singlePtr

int大小*(整数指针类型)

(u) int (大小)Ptr
例如,int64 *就变成了int64Ptr

(u) int (大小) multiplyShort

byte []

int8Ptr

int8

char [](通过以null结尾的字符串值)

装运箱

字符数组(1 xn)

stringToUpper

char * *(指向字符串的指针的数组)

stringPtrPtr

单元阵列的特征向量

枚举

enumPtr

类型* *

类型PtrPtr
例如,双* *
就变成了doublePtrPtr

lib.pointer对象

allocateStruct

void *

voidPtr

deallocateStruct

void * *

voidPtrPtr

lib.pointer对象

结构体(c风格的结构)

结构

MATLAB结构体

addStructFields

mxArray *

MATLAB数组

MATLAB数组

mxArray * *

MATLAB arrayPtr

lib.pointer对象

如何MATLAB显示函数签名

这里有事情要注意MATLAB函数签名所示的输入和输出参数。

  • 许多参数(如int32)类似于C同行。在这些情况下,通过MATLAB类型显示了这些参数。

  • 一些C参数(例如,* *的两倍或预定义的结构),不同于标准MATLAB类型。在这些情况下,可以通过一个标准的MATLAB类型和MATLAB将其转换为你,或自己使用MATLAB函数转换数据libstructlibpointer。有关更多信息,请参见手动将数据传递给函数

  • C函数经常返回数据在输入参数以引用的方式传递。MATLAB创建额外的输出参数返回这些值。输入参数以PtrPtrPtr也列为输出。

MATLAB函数签名的一个例子,看到共享库shrlibsample

指导方针将参数传递给

  • Nonscalar参数必须声明为库函数以引用的方式传递。

  • 如果库函数使用单一的下标索引引用一个二维矩阵,记住,C程序过程矩阵行,行。MATLAB处理矩阵的列。C的行为函数,在调用函数之前输入矩阵转置,然后转置函数的输出。

  • 使用一个空数组,[],通过参数一个库函数,支持可选的输入参数。金宝app这个符号是有效的只有当参数是声明为一个PtrPtrPtr如图所示,libfunctionslibfunctionsview

空指针

您可以创建一个指针传递给库函数在以下方式:

  • 通过一个空数组[]作为参数。

  • 使用libpointer功能:

    p = libpointer;%没有参数
    p = libpointer(字符串)%字符串参数
    p = libpointer(装运箱)%指针指向一个字符串参数
  • 使用libstruct功能:

    p = libstruct (“structtype”);%结构类型

libstruct对象

创建一个空的libstruct对象,调用libstruct只有在structtype论点。例如:

sci = libstruct (“c_struct”)(sci)
p1, p2 0 0 p3: 0

MATLAB显示初始化值。

手动将数据传递给函数

在大多数情况下,用MATLAB软件自动将数据传递到和从外部库函数转换为所期望的类型外部函数。然而,你可以选择手动转换您的参数数据。例如:

  • 当相同的数据传递给一系列的库函数,转换一次手动调用之前第一个函数,而不是在每次调用MATLAB它自动转换。这种策略减少了许多不必要的复制和转换操作。

  • 当通过大型结构,节省内存,创建MATLAB相匹配的结构中使用的C结构的形状而不是使用通用的MATLAB函数结构。的libstruct函数创建一个MATLAB建模结构从C结构从图书馆。

  • 当一个参数一个外部函数使用一个以上的引用(例如,双* *),通过使用创建的指针libpointer而不是依靠MATLAB函数自动类型转换。

另请参阅

|||

相关的例子

更多关于