C Function ブロックからの C スタイルのラッパー関数を使用した C++ クラス メソッドの呼び出し
この例では、C Function ブロックで、C スタイルのラッパー関数を使用して C++ クラス メソッドを呼び出す方法を説明します。テンプレート クラスなどの一部の C++ クラスでは、C Function ブロックがクラス オブジェクトの直接のインスタンス化やクラス メソッドの呼び出しをサポートしていないため、C ラッパー関数を使用する必要があります。Interface with C++ Classes Using C Function Blockを参照してください。C++ クラス メンバーおよびメソッドに直接アクセスする C Function ブロックの例については、C Function ブロックからの C++ クラス メソッドの直接呼び出しを参照してください。
この例では、C スタイルのラッパー関数は adder_wrapper.h
で宣言され、adder_wrapper.cpp
に実装されています。
このモデル例を実行するには、MATLAB® で C++ コンパイラを実行するよう設定しなければなりません。これは、mex -setup
コマンドを使用して C++ コンパイラを選択することで行えます。
C Function ブロックからの C 関数の呼び出しを有効にするため、モデルの [コンフィギュレーション パラメーター] ダイアログの [シミュレーション ターゲット] ペインにヘッダー ファイルとソース ファイルを指定します。このモデルのカスタム コード ヘッダー ファイル adder_template.h
は、クラス メンバー関数とともに adder
クラス テンプレートを定義します。ヘッダー ファイル adder_wrapper.h
には、C Function ブロックで呼び出される C スタイルのラッパー関数の宣言が含まれています。C スタイルのラッパー関数のプロトタイプは次のとおりです。
void *createAdder()
void deleteAdder(void *obj)
int adderOutput(void *obj, int increment)
ここで、void *obj
はクラス オブジェクト ハンドルで、increment
は加算器関数で使用される入力です。
C Function ブロック ダイアログの [開始コード] セクションで関数 createAdder
が呼び出され、adder
クラスのオブジェクトを作成します。[終了コード] セクションで関数 deleteAdder
が呼び出され、adder
クラス オブジェクトを破棄します。[出力コード] セクションで、関数 adderOutput
が呼び出されます。この例では、C Function ブロックの端子は次のように設定されます。
関数
createAdder
で返されるadder
クラス オブジェクトobj
は、C Function ブロックのPersistent
シンボルです。C Function ブロックの入力は
increment
にマッピングされます。C Function ブロックの出力は関数
adderOutput
の戻り値にマッピングされます。