このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
addStructFields
と関数addStructByRef
サンプルライブラリshrlibsample
には,c_struct
構造体入力パラメーターをもつ2つの関数が含まれています。c_struct
はshrlibsample.h
ヘッダーファイルで定義されています。
Struct c_struct {double p1;短p2;长p3;};
どちらの関数も構造体のフィールドの値を合計します。addStructFields
への入力はc_struct
です。addStructByRef
への入力はc_struct
を指すポインターです。この関数はまた,値を合計した後にフィールドを変更します。
addStructFields
関数addStructFields
は,c_struct
構造体のフィールドの値を合計します。
addStructFields(struct c_struct st) {double t = st.p1 + st.p2 + st.p3;返回t;}
MATLAB®関数シグネチャは次のとおりです。
戻り値の型 | 名前 | 引数 |
---|---|---|
双 |
addStructFields |
(struct c_struct) |
addStructByRef
関数addStructByRef
は,c_struct
構造体のフィールドの値を合計し,その後フィールドを変更します。この関数は,フィールドを変更する前に合計の計算値を返します。
export_function double addStructByRef(struct c_struct *st) {double t = st->p1 + st->p2 + st->p3;圣- > p1 = 5.5;圣- > p2 = 1234;圣- > p3 = 12345678;返回t;}
関数によって入力引数が変更されるため,MATLABは入力をc_structPtr
型の出力引数としても返します。MATLAB関数シグネチャは次のとおりです。
戻り値の型 | 名前 | 引数 |
---|---|---|
(双 |
addStructByRef |
(c_structPtr) |
MATLAB構造体を関数に渡し,MATLABで引数を自動変換することができます。あるいは,ポインターを構造体に渡すことで,構造体のコピーが作成されないようにすることもできます。
この例では,MATLAB構造体を関数addStructFields
に渡す方法を説明します。
構造体sm
を作成して初期化します。フィールドはそれぞれ双
型です。
sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;
関数addStructFields
を含むライブラリを読み込みます。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”) loadlibrary (“shrlibsample”)结束
関数を呼び出します。MATLABにより、構造体sm
のフィールドがc_struct
のライブラリ定義に自動的に変換されます。
calllib (“shrlibsample”,“addStructFields”sm)
ans = 1177
この例では,構造体sm
をc_struct
にあらかじめ変換してからaddStructFields
を呼び出す方法を説明します。sm
を関数に繰り返し渡す場合は,あらかじめ変換することで,関数呼び出しごとに構造体を自動変換するためにMATLABで必要とされる処理時間がなくなります。
MATLAB構造体を作成して初期化します。
sm。p1 = 476;sm。p2 = -299;sm。p3 = 1000;
関数addStructFields
を含むライブラリを読み込みます。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”) loadlibrary (“shrlibsample”)结束
双
型のフィールドを変換して,双
、短
、长
のc_struct
構造体型に対応させます。
sc = libstruct (“c_struct”, sm);
フィールド名とその値を表示します。
得到(sc)
P1: 476 p2: -299 p3: 1000
フィールドの値を追加します。
calllib (“shrlibsample”,“addStructFields”, sc)
ans = 1177
この例では,MATLAB構造体をCライブラリ関数addStructByRef
に渡す方法を説明します。構造体を渡すとき、MATLAB はフィールド タイプを自動的に変換しますが、MATLAB はフィールドのコピーも作成します。
ライブラリを読み込みます。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”) loadlibrary (“shrlibsample”)结束
構造体を作成します。
S.p1 = 476;S.p2 = -299;S.p3 = 1000;
addStructByRef
を呼び出します。
res = calllib (“shrlibsample”,“addStructByRef”,年代)
res = 1177
構造体年代
はポインターではないため,MATLABはその内容を変更しません。
年代
S =结构体字段:P1: 476 p2: -299 p3: 1000
この例では,ポインターを指定して関数addStructByRef
を呼び出すと,入力引数のフィールドがどのように変更されるかを説明します。
如果不是(libisloaded (“shrlibsample”)目录(fullfile (matlabroot,“外来的”,“例子”,“shrlib”) loadlibrary (“shrlibsample”)结束
c_struct
型の構造体を作成します。
S.p1 = 20;S.p2 = 99;S.p3 = 3;
構造体を指すポインターsp
を作成します。
sp = libpointer (“c_struct”,年代);sp.Value
ans =结构体字段:p2: 99 p3: 3
関数にポインターを渡します。
res = calllib (“shrlibsample”,“addStructByRef”, sp)
res = 122
ポインターを渡すと,その関数はポインターの指す構造体内のフィールドを変更します。
sp.Value
ans =结构体字段:P1: 5.5000 p2: 1234 p3: 12345678