共享C库函数传递参数
C和MATLAB相同的类型
共享库接口支持所有标准C标量类型。金宝app下面的表显示了这些C类型等效MATLAB®类型。MATLAB使用右列的类型参数C类型显示在左边的列中。
请注意
所有由MATLAB返回标量值的类型双
。
MATLAB原始类型
C类型 | 相当于MATLAB类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
无符号长 (窗口) |
|
无符号长 (Linux) |
|
|
|
|
|
|
|
|
单元阵列的特征向量 |
下面的表显示了MATLAB地图C指针(第1列)相当于MATLAB函数签名(列2)。通常,您可以通过一个变量的等价的MATLAB函数与相应的参数数据类型列类型。看到在C函数指针参数对于何时使用的信息lib.pointer
对象。
MATLAB扩展的类型
C指针类型 | 论点 数据类型 |
等效 MATLAB类型 |
例子函数 |
---|---|---|---|
|
|
双 |
addDoubleRef |
|
|
单 |
|
|
|
(u) int ( |
multiplyShort |
|
|
int8 |
|
|
|
|
stringToUpper |
|
|
单元阵列的特征向量 |
|
枚举 |
|
||
|
|
|
allocateStruct |
|
|
deallocateStruct |
|
|
|
|
|
|
结构 |
MATLAB |
addStructFields |
|
|
MATLAB数组 |
|
|
|
|
如何MATLAB显示函数签名
这里有事情要注意MATLAB函数签名所示的输入和输出参数。
许多参数(如
int32
和双
)类似于C同行。在这些情况下,通过MATLAB类型显示了这些参数。一些C参数(例如,
* *的两倍
或预定义的结构),不同于标准MATLAB类型。在这些情况下,可以通过一个标准的MATLAB类型和MATLAB将其转换为你,或自己使用MATLAB函数转换数据libstruct
和libpointer
。有关更多信息,请参见手动将数据传递给函数。C函数经常返回数据在输入参数以引用的方式传递。MATLAB创建额外的输出参数返回这些值。输入参数以
Ptr
或PtrPtr
也列为输出。
MATLAB函数签名的一个例子,看到共享库shrlibsample。
指导方针将参数传递给
Nonscalar参数必须声明为库函数以引用的方式传递。
如果库函数使用单一的下标索引引用一个二维矩阵,记住,C程序过程矩阵行,行。MATLAB处理矩阵的列。C的行为函数,在调用函数之前输入矩阵转置,然后转置函数的输出。
使用一个空数组,
[]
,通过零
参数一个库函数,支持可选的输入参数。金宝app这个符号是有效的只有当参数是声明为一个Ptr
或PtrPtr
如图所示,libfunctions
或libfunctionsview
。
空指针
您可以创建一个零
指针传递给库函数在以下方式:
通过一个空数组
[]
作为参数。使用
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函数自动类型转换。
另请参阅
libstruct
|libpointer
|libfunctions
|libfunctionsview