表示通过引用通过的仅限写入数据
编码器.wref(
表明arg
)arg
是一个只写的表达式或变量,通过引用传递给外部C/ c++函数。利用编码器.Wref.
只有在A内coder.ceval
呼叫。此功能使代码生成器能够通过忽略先前的分配来优化生成的代码arg
MATLAB中®代码,因为假设外部函数无法从数据中读取。写信给所有元素arg
在外部代码中完全初始化内存。
注意
C / C ++函数必须完全初始化所引用的内存Coder.Wref(arg)
。通过为每个元素分配值来初始化内存arg
在你的C/ c++代码中。如果生成的代码试图从未初始化的内存中读取,则可能导致未定义的运行时行为。
也可以看看编码器.REF.
和Coder.Rref.
。
假设你有一个C函数init_array
。
void init_array(双* array,int numel){for(int i = 0; i
C函数定义输入变量数组
作为指向双倍的指针。
拨打C函数init_array
初始化所有元素y
到42:
......Y = 0 (5,10);Coder.CEVAL('init_array',编码器.wref(y),int32(numel(y)));......
......U =零(5,10);v =零(5,10);Coder.CEVAL('my_fcn',编码器.wref(u),int32(numel(u)),coder.wref(v),int32(numel(v)));......
......x = myClass;x.prop = 1;Coder.CEVAL('foo',编码器.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.
:
#ifndef MYSTRUCT #define MYSTRUCT typedef struct MYSTRUCT {double f1;双f2;} MyStruct;void init_struct(struct MyStruct *my_struct);# endif
在MATLAB函数中,传递一个结构作为只写引用init_struct.
。利用coder.cstructname
表示结构类型S.
有名字mystruct.
它在C头文件中定义MyStruct.h
。
函数y = foo%#codegen.y = 0;Coder.updateBuildInfo(“addSourceFiles”那'init_struct.c');s = struct('f1',1,“f2”,2);编码器.cstructName(s,'mystrict'那“外来的”那'头球文件'那'mystruct.h');Coder.CEVAL(“init_struct”,编码器.wref(s));
要生成独立库代码,输入:
Codegen.配置:自由Foo-报告
......s = struct('s1',struct('一个'[0, 1]));Coder.CEVAL('foo',编码器.wref(s.s1.a));......
你也可以传递一个结构数组的元素:
......c = repmat(结构('U'魔法(2)1 10);b = repmat(结构体('C',c),3,6);a = struct('B',b);Coder.CEVAL('foo',编码器.wref(a.b(3,4).c(2).u));......
你不能通过引用传递这些数据类型:
类或系统对象
单元格数组或索引到单元阵列中
如果属性具有get方法、set方法或验证器,或者是具有某些属性的系统对象属性,那么您就不能通过引用将属性传递给外部函数。看到通过引用不支持某些属性万博1manbetx。
如果arg
是一个数组,然后是Coder.Wref(arg)
提供数组的第一个元素的地址。该Coder.Wref(arg)
函数不包含有关数组大小的信息。如果C函数必须知道数据的元素数,请将该信息作为单独的参数传递。例如:
Coder.CEVAL('myfun'coder.wref (arg)、int32(元素个数(arg));
通过引用外部C / C ++功能通过结构,使用coder.cstructname
提供在C头文件中定义的C结构类型的名称。
在matlab,编码器.Wref.
导致错误。参加MATLAB代码,以便它可以在MATLAB和生成的代码中运行,使用编码器.Target.
。
您可以使用coder.opaque
声明传递给外部C/ c++函数和从外部C/ c++函数传递的变量。