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