主要内容

编码器.Wref.

表示通过引用通过的仅限写入数据

描述

编码器.wref(arg表明arg是一个只写的表达式或变量,通过引用传递给外部C/ c++函数。利用编码器.Wref.只有在A内coder.ceval呼叫。此功能使代码生成器能够通过忽略先前的分配来优化生成的代码argMATLAB中®代码,因为假设外部函数无法从数据中读取。写信给所有元素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));......

输入参数

全部收缩

通过引用通过引用外部C / C ++函数来传递参数。该参数不能是类,系统对象™,一个小区数组或索引到单元格数组中。

数据类型:||INT8.|int16|INT32.|INT64.|uint8.|uint16|UINT32|UINT64|逻辑|char|塑造
复数支持:万博1manbetx

限制

  • 你不能通过引用传递这些数据类型:

    • 类或系统对象

    • 单元格数组或索引到单元阵列中

  • 如果属性具有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++函数传递的变量。

在R2011A介绍