このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
参照渡しするデータを示す
coder.ref(
は、arg
)arg
が外部 C/C++ 関数へ参照渡しする式または変数であることを示します。coder.ref
はcoder.ceval
呼び出しの内部でのみ使用します。C/C++ 関数は参照渡しされる変数に対して読み取りまたは書き込みできます。関数に参照渡しする引数ごとに、別個のcoder.ref
構成を使用します。
coder.rref
とcoder.wref
も参照してください。
入力に 1 を加算した値を返す C 関数addone
について考えます。
double addone(double* p) { return *p + 1; }
C 関数は入力変数p
を double へのポインターとして定義します。
入力を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" void incr_struct(struct MyStruct *my_struct) { my_struct->f1 = my_struct->f1 + 1; my_struct->f2 = my_struct->f2 + 1; }
C ヘッダー ファイルMyStruct.h
はMyStruct
という名前の構造体型を定義します。
#ifndef MYSTRUCT #define MYSTRUCT typedef struct MyStruct { double f1; double f2; } MyStruct; void incr_struct(struct MyStruct *my_struct); #endif
MATLAB®関数で、incr_struct
に構造体を参照で渡します。s
の構造体型に C ヘッダー ファイルMyStruct.h
で定義された名前MyStruct
が付いていることを示すには、coder.cstructname
を使用します。
functiony = foo%#codegeny = 0; coder.updateBuildInfo('addSourceFiles','incr_struct.c'); s = struct('f1',1,'f2',2); coder.cstructname(s,'MyStruct','extern','HeaderFile','MyStruct.h'); coder.ceval('incr_struct', coder.ref(s));
スタンドアロンのライブラリ コードを生成するには、以下を入力します。
codegen-config:libfoo-report
...s = struct('s1', struct('a', [0 1])); coder.ceval('foo'coder.ref (s.s1.a));...
構造体の配列の要素を渡すこともできます。
...c = repmat(struct('u',magic(2)),1,10); b = repmat(struct('c'c) 3、6);一个=结构('b',b); coder.ceval('foo', coder.ref(a.b(3,4).c(2).u));...
次のデータ型を参照で渡すことはできません。
クラスまたは System object
cell 配列または cell 配列へのインデックス
プロパティに get メソッド、set メソッド、または検証関数がある場合、またはプロパティが特定の属性をもつ System object プロパティである場合、そのプロパティを外部関数に参照で渡すことはできません。一部のプロパティでサポートされない参照渡しを参照してください。
arg
が配列の場合,coder.ref(arg)
は配列の最初の要素のアドレスを提供します。関数coder.ref(arg)
に、配列のサイズに関する情報は含まれません。C 関数がデータの要素数を把握しなければならない場合、その情報を別の引数として渡します。次に例を示します。
coder.ceval('myFun',coder.ref(arg),int32(numel(arg));
外部 C/C++ 関数に構造体を参照渡しする場合、coder.cstructname
を使用して C ヘッダー ファイルで定義される C 構造体型の名前を指定します。
MATLAB では、coder.ref
はエラーになります。MATLAB コードをパラメーター化して MATLAB と生成されたコード内で実行できるようにするには、coder.target
を使用します。
coder.opaque
を使用して、外部 C/C++ 関数との間で受け渡す変数を宣言できます。