主要内容

通过结构的例子

addstructfields.addStructByRef功能

shrlibsample示例库包含两个函数c_struct结构输入参数。c_struct定义于shrlibsample.h头文件。

Struct c_struct {double p1;短p2;长p3;};

这两个函数对结构中字段的值求和。的输入addstructfields.c_struct.的输入addStructByRef是指向c_struct.这个函数还在对值求和后修改字段。

addstructfields.功能

addstructfields.函数中各字段的值的和c_struct结构。

exported_function double addstructiffields(struct c_struct st){double t = st.p1 + st.p2 + st.p3;返回t;}

MATLAB®功能签名是:

返回类型 的名字 参数
addstructfields. (struct c_struct)

addStructByRef功能

addStructByRef函数中各字段的值的和c_struct结构,然后修改字段。函数返回在修改字段之前计算的和。

export_function double addStructByRef(struct c_struct *st) {double t = st->p1 + st->p2 + st->p3;圣- > p1 = 5.5;圣- > p2 = 1234;圣- > p3 = 12345678;返回t;}

由于该函数修改了输入参数,MATLAB也将输入返回为类型的输出参数c_structptr..MATLAB函数签名为:

返回类型 的名字 参数
(双
c_structPtr]
addStructByRef (c_structptr)

您可以将一个MATLAB结构传递给函数,并让MATLAB自动转换参数。或者你可以传递一个指针给一个结构,这样可以避免创建一个结构的副本。

在结构中添加字段值

这个例子展示了如何将一个MATLAB结构传递给函数,addstructfields.

创建和初始化结构sm.每个字段都是类型的

sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;

加载包含addstructfields.函数。

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”)结束

调用的函数。MATLAB自动转换结构域sm的库定义c_struct

calllib (“shrlibsample”“addStructFields”sm)
ans = 1177

加值前的MATLAB结构预转换

这个例子展示了如何预转换结构smc_struct在调用之前addstructfields..如果你反复通过sm对于函数,预转换消除了MATLAB为每个函数调用自动转换结构所需的处理时间。

创建并初始化一个MATLAB结构。

sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;

加载包含addstructfields.函数。

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”)结束

转换类型为的字段,以配合c_struct结构类型,, 和

sc = libstruct(“c_struct”,SM);

显示字段名称和值。

得到(sc)
P1: 476 p2: -299 p3: 1000

添加字段值。

calllib (“shrlibsample”“addStructFields”, sc)
ans = 1177

Autoconvert结构参数

此示例显示如何将MATLAB结构传递给C库函数,addStructByRef.当您通过该结构时,MATLAB会自动转换字段类型,但MATLAB也会制作字段的副本。

加载库。

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”)结束

创建一个结构。

S.p1 = 476;S.p2 = -299;S.p3 = 1000;

调用addStructByRef

res = calllib (“shrlibsample”“addStructByRef”,年代)
res = 1177

MATLAB不会修改结构的内容年代,因为它不是一个指针。

年代
S =结构体字段:P1: 476 p2: -299 p3: 1000

传递指向结构的指针

这个例子展示了如何调用addStructByRef函数的指针修改输入参数中的字段。

如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,'extern''例子'“shrlib”) loadlibrary (“shrlibsample”)结束

创建一个类型结构c_struct

S.p1 = 20;S.p2 = 99;S.p3 = 3;

创建一个指针sp的结构。

sp = libpointer (“c_struct”,年代);sp.Value
ans =结构体字段:p2: 99 p3: 3

将指针传递给函数。

res = calllib (“shrlibsample”“addStructByRef”,sp)
res = 122

当传递一个指针时,函数会修改它所指向的结构中的字段。

sp.Value
ans =结构体字段:P1: 5.5000 p2: 1234 p3: 12345678

另请参阅

|

相关的例子

更多关于