文档

coder.wref

指示通过引用传递的仅写数据

描述

例子

coder.wref (参数表明参数是通过引用传递给外部C/ c++函数的只写表达式或变量。使用coder.wref只有在一个coder.ceval调用。此函数使代码生成器能够通过忽略先前的赋值来优化生成的代码参数在MATLAB中®代码,因为假设外部函数不从数据中读取。的所有元素参数在外部代码中完全初始化内存。

请注意

函数所引用的内存必须完全初始化coder.wref (arg)。的每个元素赋值来初始化内存参数在C/ c++代码中。如果生成的代码试图从未初始化的内存中读取,则可能导致未定义的运行时行为。

另请参阅coder.refcoder.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的所有元素初始化y42:

...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));...

输入参数

全部折叠

通过引用传递给外部C/ c++函数的参数。参数不能是类、System object™、单元格数组或单元格数组的索引。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|结构体
复数支持:金宝app是的

限制

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

    • 类或系统对象

    • 单元格数组或单元格数组的索引

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

在R2011a中引入