共享库接口支持所有标准标量C类型。下表显示了这些C类型及其万博1manbetx等效的MATLAB®MATLAB使用右列中的类型作为左列中显示的C类型的参数。
笔记
MATLAB返回的所有标量值都是双重的
.
MATLAB基本类型
C型 | 等效MATLAB类型 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
无符号长 (窗口) |
|
无符号长 (Linux) |
|
|
|
|
|
|
|
|
字符向量单元数组 |
下表显示了MATLAB如何将C指针(第1列)映射到等效的MATLAB函数签名(第2列)。通常,您可以将等效MATLAB类型列中的变量传递给具有相应参数数据类型的函数。看见C函数中的指针参数有关何时使用lib.pointer
反对。
MATLAB扩展类型
C指针类型 | 论点 数据类型 |
相等的 MATLAB类型 |
中的示例函数 |
---|---|---|---|
|
|
双重的 |
addDoubleRef |
|
|
仅有一个的 |
|
|
|
(u) int( |
多倍短 |
|
|
int8 |
|
|
|
|
Stringtouper |
|
|
字符向量单元数组 |
|
枚举 |
|
||
|
|
|
分配结构 |
|
|
deallocateStruct |
|
|
|
|
|
|
结构 |
MATLAB |
addStructFields |
|
|
MATLAB阵列 |
|
|
|
|
以下是有关MATLAB函数签名中显示的输入和输出参数的注意事项。
许多争论(比如int32
和双重的
)与它们的C对应项类似。在这些情况下,传入为这些参数显示的MATLAB类型。
一些C参数(例如,**双重的
,或预定义结构),与标准MATLAB类型不同。在这些情况下,要么传递一个标准的MATLAB类型并让MATLAB为您转换它,要么使用MATLAB函数自己转换数据libstruct
和libpointer
. 有关详细信息,请参阅手动转换传递给函数的数据.
C函数通常在通过引用传递的输入参数中返回数据。MATLAB创建额外的输出参数以返回这些值。输入参数以Ptr
或PtrPtr
也被列为输出。
有关MATLAB函数签名的示例,请参见共享库shribSample.
非标量参数必须声明为在库函数中通过引用传递。
如果库函数使用单下标索引来引用二维矩阵,请记住C程序逐行处理矩阵。MATLAB按列处理矩阵。要从函数中获得C行为,请在调用函数之前转置输入矩阵,然后转置函数输出。
使用空数组,[]
,通过无效的
支持可选输入参数的库函数的参数。仅当参数声明为万博1manbetxPtr
或PtrPtr
如图所示libfunctions
或libfunctionsview
.
您可以创建一个无效的
通过以下方式传递到库函数的指针:
传递一个空数组[]
作为论据。
使用libpointer
功能:
p=libpointer;%无参数
p=libpointer('string')%string参数
p=libpointer('cstring')%指向字符串参数的指针
使用libstruct
功能:
p=libstruct('structtype');%结构类型
libstruct
对象创建一个空的libstruct
对象,呼叫libstruct
只有结构类型
参数。例如:
sci=libstruct(“c_结构”)获取(sci)
p1:0 p2:0 p3:0
MATLAB显示初始化值。
在大多数情况下,MATLAB软件会自动将传入和传出外部库函数的数据转换为外部函数所需的类型。但是,您可以选择手动转换参数数据。例如:
将相同的数据传递给一系列库函数时,在调用第一个函数之前手动转换一次,而不是让MATLAB在每次调用时自动转换。此策略减少了不必要的复制和转换操作的数量。
当传递大型结构时,通过创建与函数中使用的C结构形状匹配的MATLAB结构来节省内存,而不是使用通用的MATLAB结构libstruct
函数创建一个从库中获取的C结构建模的MATLAB结构。
当外部函数的参数使用多个级别的引用时(例如,双重的**
),传递使用libpointer
函数,而不是依靠MATLAB自动转换类型。
libstruct
|libpointer
|libfunctions
|libfunctionsview