coder.ref
显示数据以引用的方式传递
描述
coder.ref (
表明参数
)参数
是一个表达式或变量通过引用一个外部C / c++函数。使用coder.ref
在一个coder.ceval
只有打电话。C / c++函数可以读取或者写入变量以引用的方式传递。使用一个单独的coder.ref
构造为每个参数通过引用传递给函数。
另请参阅coder.rref
和coder.wref
。
例子
通过标量变量引用
考虑到C函数addone
返回的值输入+ 1:
双addone(双* p){返回* p + 1;}
C函数定义了输入变量p
作为双指针。
通过输入通过引用addone
:
…y = 0;u = 42;y = coder.ceval (“addone”,coder.ref (u));…
以引用的方式传递多个参数
…u = 1;v = 2;y = coder.ceval (“my_fcn”coder.ref (u), coder.ref (v));…
通过引用传递类属性
…x = myClass;x。prop = 1; coder.ceval(“foo”coder.ref (x.prop));…
以引用的方式传递结构
表明C头文件中定义的结构类型,使用coder.cstructname
。
假设您的C函数incr_struct
。这个函数输入参数的读取和写入。
# include“MyStruct。h”空白incr_struct (struct MyStruct * my_struct) {my_struct f1 - > = my_struct - > f1 + 1;my_struct - > = my_struct f2 - > f2 + 1;}
C头文件,MyStruct.h
,定义一个结构类型命名MyStruct
:
的ifndef MYSTRUCT # define MYSTRUCT typedef struct MYSTRUCT{双f1;双f2;}MyStruct;空白incr_struct (struct MyStruct * my_struct);# endif
MATLAB中®函数,通过结构参照incr_struct
。表明结构类型年代
有名字MyStruct
这是C头文件中定义的MyStruct.h
,使用coder.cstructname
。
函数y = foo% # codegeny = 0;coder.updateBuildInfo (“addSourceFiles”,“incr_struct.c”);s =结构(“f1”,1“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);coder.ceval (“incr_struct”coder.ref (s));
生成独立的库代码,请输入:
codegen配置:自由喷火报告
通过引用传递结构字段
…s =结构(“s1 '结构(“一个”[0,1]));coder.ceval (“foo”coder.ref (s.s1.a));…
你也可以通过结构的一个元素的数组:
…c = repmat(结构体(“u”魔法(2)1 10);b = repmat(结构体(“c”c) 3、6);一个=结构(“b”,b);coder.ceval (“foo”coder.ref (a.b (3, 4) . c (2) .u));…
输入参数
限制
你不能通过引用传递这些数据类型:
类或系统对象
单元阵列或索引单元阵列
如果一个属性的get方法,一组方法,或验证器,或者是一个系统对象属性与某些属性,那么你不能通过财产通过引用一个外部函数。看到按引用传递一些属性的不支持金宝app。
提示
如果
参数
是一个数组,然后呢coder.ref (arg)
提供了数组的第一个元素的地址。的coder.ref (arg)
功能不包含数组的大小的信息。如果C函数必须知道的元素数量的数据,通过这些信息作为一个单独的参数。例如:coder.ceval (“myFun”coder.ref (arg)、int32(元素个数(arg));
当你通过结构通过引用一个外部C / c++函数,使用
coder.cstructname
提供一个C结构类型的名称是一个C头文件中定义。在MATLAB中,
coder.ref
会导致错误。参数化MATLAB代码,以便它可以运行在MATLAB和生成的代码,使用coder.target
。您可以使用
coder.opaque
声明变量传递给和从外部C / c++函数。