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函数签名为:
返回类型 | 的名字 | 参数 |
---|---|---|
(双 |
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
这个例子展示了如何预转换结构sm
来c_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
此示例显示如何将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