通过结构的例子
addStructFields
和addStructByRef
功能
的shrlibsample
示例库包含两个函数c_struct
结构输入参数。c_struct
被定义的shrlibsample.h
头文件。
struct c_struct{双p1;短p2;长p3;};
两个函数和结构中的字段的值。的输入addStructFields
是c_struct
。的输入addStructByRef
是一个指针c_struct
。这个函数也求和后修改的字段值。
addStructFields
函数
的addStructFields
函数中的字段的值c_struct
结构。
EXPORTED_FUNCTION双addStructFields (struct c_struct st){双t = st.p1 + st.p2 + st.p3;返回t;}
MATLAB®函数签名:
返回类型 | 的名字 | 参数 |
---|---|---|
双 |
addStructFields |
(struct c_struct) |
addStructByRef
函数
的addStructByRef
函数中的字段的值c_struct
结构,然后修改字段。函数返回总和计算之前修改的字段。
EXPORTED_FUNCTION双addStructByRef (struct c_struct * st){双t =圣- > p1 +圣- > p2 +圣- > p3;圣- > p1 = 5.5;圣- > p2 = 1234;圣- > p3 = 12345678;返回t;}
由于函数修改输入参数,MATLAB还返回类型的输入作为一个输出参数c_structPtr
。MATLAB函数签名:
返回类型 | 的名字 | 参数 |
---|---|---|
(双 |
addStructByRef |
(c_structPtr) |
你可以通过MATLAB结构的功能,让MATLAB autoconvert论点。或者你可以通过一个指向结构的指针,它可以避免创建的副本结构。
添加的值字段的结构
这个例子展示了如何通过MATLAB结构函数,addStructFields
。
创建和初始化结构sm
。每个字段的类型双
。
sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;
加载库包含addStructFields
函数。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”)loadlibrary (“shrlibsample”)结束
调用的函数。MATLAB自动转换领域的结构sm
库定义的c_struct
。
calllib (“shrlibsample”,“addStructFields”sm)
ans = 1177
Preconvert MATLAB结构之前添加值
这个例子展示了如何preconvert结构sm
来c_struct
在调用之前addStructFields
。如果你不断地通过sm
函数,preconverting消除所需的处理时间为每个函数调用MATLAB autoconvert结构。
创建并初始化一个MATLAB结构。
sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;
加载库包含addStructFields
函数。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”)loadlibrary (“shrlibsample”)结束
转换字段的类型双
,比赛c_struct
结构类型,双
,短
,长
。
sc = libstruct (“c_struct”,sm);
显示字段名称和值。
得到(sc)
476年p1, p2: -299 p3: 1000
添加字段值。
calllib (“shrlibsample”,“addStructFields”,sc)
ans = 1177
Autoconvert结构参数
这个例子展示了如何通过MATLAB结构C库函数,addStructByRef
。当你通过结构、MATLAB自动转换字段类型,但MATLAB也使字段的一个副本。
加载库。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”)loadlibrary (“shrlibsample”)结束
创建一个结构。
年代。p1 = 476;年代。p2 = -299;年代。p3 = 1000;
调用addStructByRef
。
res = calllib (“shrlibsample”,“addStructByRef”,年代)
res = 1177
MATLAB不修改的内容结构年代
,因为它不是一个指针。
年代
S =结构体字段:476年p1, p2: -299 p3: 1000
将指针传递给结构
这个例子显示了如何调用addStructByRef
函数指针修改字段的输入参数。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”)loadlibrary (“shrlibsample”)结束
创建一个结构类型c_struct
。
年代。p1 = 20;年代。p2 = 99;年代。p3 = 3;
创建一个指针sp
的结构。
sp = libpointer (“c_struct”,年代);sp.Value
ans =结构体字段:p1: 20 p2: 99 p3: 3
通过指向函数的指针。
res = calllib (“shrlibsample”,“addStructByRef”,sp)
res = 122
当您传递一个指针,函数修改的字段结构它指向。
sp.Value
ans =结构体字段:p1: 5.5000 p2: 1234 p3: 12345678