C 共有ライブラリ関数内での構造体引数の表現
構造体引数の要件
MATLAB® 構造体を外部ライブラリ関数に渡す場合:
各 MATLAB フィールド名は、ライブラリ構造体定義内のフィールド名と一致しなければなりません。フィールド名では大文字と小文字が区別されます。
MATLAB 構造体には、ライブラリ構造体定義内にないフィールドを含めることはできません。
MATLAB 構造体に含まれるフィールドの数が、ライブラリ構造体で定義されているものよりも少ない場合、MATLAB は未定義のフィールドをゼロに設定します。
数値フィールドのデータ型を一致させる必要はありません。関数 calllib
で正しい数値型に変換されます。
構造体フィールド名の検索
構造体フィールドの名前とデータ型は、以下によって特定できます。
ライブラリのドキュメンテーションを参照する。
ライブラリ ヘッダー ファイルの構造体定義を確認する。
関数
libstruct
を使用する。
構造体の受け渡し方法
MATLAB は構造体を、その構造体型に対応するライブラリ定義に自動的に変換します。小さい構造体を操作している場合など、多くの場合はこれで問題は生じません。
ただし、大きい構造体を渡す呼び出しが繰り返される場合は、外部関数を呼び出す前にその構造体を手動で変換してください。構造体データを関数が呼び出されるたびに変換する代わりに最初に一度だけ変換することで、処理時間が節約されます。さらに、変換された構造体のフィールドが占める領域が元の MATLAB 構造体よりも少なければ、メモリも節約できます。
手動で変換するには、関数 libstruct
を呼び出して "libstruct オブジェクト" を作成します。これはオブジェクトですが、MATLAB 構造体のように動作します。このオブジェクトのフィールドは、外部で指定された構造体型から派生します。