Main Content

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 の戻り値にマッピングされます。

参考