文档

coder.ref

显示数据以引用的方式传递

描述

例子

coder.ref (参数)表明参数是一个表达式或变量通过引用一个外部C / c++函数。使用coder.ref在一个coder.ceval只有打电话。C / c++函数可以读取或者写入变量以引用的方式传递。使用一个单独的coder.ref构造为每个参数通过引用传递给函数。

另请参阅coder.rrefcoder.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));

输入参数

全部折叠

参数按引用传递给外部C / c++函数。参数不能是一个类,一个系统对象™,单元阵列或索引单元阵列。

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

限制

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

    • 类或系统对象

    • 单元阵列或索引单元阵列

  • 如果一个属性的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++函数。

介绍了R2011a