coder.wref
指示通过引用传递的仅写数据
描述
coder.wref (
表明参数
)参数
是通过引用传递给外部C/ c++函数的只写表达式或变量。使用coder.wref
只有在一个coder.ceval
调用。此函数使代码生成器能够通过忽略先前的赋值来优化生成的代码参数
在MATLAB中®代码,因为假设外部函数不从数据中读取。的所有元素参数
在外部代码中完全初始化内存。
请注意
函数所引用的内存必须完全初始化coder.wref (arg)
。的每个元素赋值来初始化内存参数
在C/ c++代码中。如果生成的代码试图从未初始化的内存中读取,则可能导致未定义的运行时行为。
另请参阅coder.ref
和coder.rref
。
例子
通过引用传递Array为Write-Only
假设你有一个C函数init_array
。
Void init_array(double* array, int numel) {for(int I = 0;I < null;i++) {array[I] = 42;}}
C函数定义了输入变量数组
作为指向double类型的指针。
调用C函数init_array
的所有元素初始化y
42:
...Y = 0 (5,10);coder.ceval (“init_array”, coder.wref(Y), int32(nummel (Y)));...
传递多个参数作为只写引用
...U = 0 (5,10);V = 0 (5,10);coder.ceval (“my_fcn”coder.wref (U)、int32(元素个数(U), coder.wref (V), int32(元素个数(V)));...
传递类属性作为只写引用
...x = myClass;X.prop = 1;coder.ceval (“foo”coder.wref (x.prop));...
传递结构作为只写引用
要指示结构类型是在C头文件中定义的,请使用coder.cstructname
。
假设你有C函数init_struct
。这个函数写入输入参数,但不从中读取。
#include "MyStruct.h" void init_struct(struct MyStruct *my_struct) {my_struct->f1 = 1;My_struct ->f2 = 2;}
C头文件,MyStruct.h
,定义了一个名为MyStruct
:
#定义MYSTRUCT类型MYSTRUCT {double f1;双f2;} MyStruct;void init_struct(struct MyStruct *my_struct);# endif
在您的MATLAB函数中,传递一个结构作为只写引用init_struct
。使用coder.cstructname
的结构类型年代
有名字MyStruct
它在C头文件中定义MyStruct.h
。
函数Y = foo% # codegenY = 0;coder.updateBuildInfo (“addSourceFiles”,“init_struct.c”);S = struct()“f1”,1,“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);coder.ceval (“init_struct”coder.wref (s));
要生成独立库代码,请输入:
codegen配置:自由喷火报告
传递结构字段作为只写引用
...S = struct()“s1 '结构(“一个”, [0 1]);coder.ceval (“foo”coder.wref (s.s1.a));...
你也可以传递一个结构数组的元素:
...C = repmat(struct)“u”魔法(2)1 10);B = repmat(struct)“c”c) 3、6);A = struct()“b”, b);coder.ceval (“foo”coder.wref (a.b (3, 4) . c (2) .u));...
输入参数
限制
不能通过引用传递这些数据类型:
类或系统对象
单元格数组或单元格数组的索引
如果属性具有get方法、set方法或验证器,或者是具有某些属性的系统对象属性,则不能通过引用将属性传递给外部函数。看到某些属性不支持按引用传递金宝app。
提示
如果
参数
是一个数组吗coder.wref (arg)
提供数组第一个元素的地址。的coder.wref (arg)
函数不包含有关数组大小的信息。如果C函数必须知道数据的元素数量,则将该信息作为单独的参数传递。例如:coder.ceval (“myFun”coder.wref (arg)、int32(元素个数(arg));
当通过引用将结构传递给外部C/ c++函数时,使用
coder.cstructname
提供在C头文件中定义的C结构类型的名称。在MATLAB中,
coder.wref
导致错误。参数化您的MATLAB代码,使其可以在MATLAB和生成的代码中运行,使用coder.target
。你可以用
coder.opaque
声明传递给外部C/ c++函数或从外部C/ c++函数传递的变量。