coder.ceval
外部 C/C++ 関数の呼び出し
構文
説明
coder.ceval(
は、cfun_name
)cfun_name
で指定された外部 C/C++ 関数を実行します。外部 C/C++ ソース ファイルまたはライブラリ内で cfun_name
を定義します。外部ソース、ライブラリおよびヘッダー ファイルをコード ジェネレーターに提供します。
coder.ceval(
は、引数 cfun_name
,cfun_arguments
)cfun_arguments
を使用して cfun_name
を実行します。cfun_arguments
は、cfun_name
が要求する順序による入力引数のコンマ区切りリストです。
既定の設定では、C/C++ が引数の値渡しをサポートするときはいつでも、coder.ceval
は C/C++ 関数に引数を値渡しします。coder.ceval
が引数を参照渡しするには、coder.ref
、coder.rref
、coder.wref
構成を使用します。たとえば、引数が配列のときなど、C/C++ が引数の値渡しをサポートしない場合、coder.ceval
は引数を参照渡しします。coder.ref
、coder.rref
、または coder.wref
を使用しないと、引数のコピーが生成コードに現れ、配列に対して MATLAB® セマンティクスを強制する可能性があります。
coder.ceval(
は '-global'
,cfun_name
)cfun_name
を実行し、cfun_name
が 1 つ以上の MATLAB グローバル変数を使用することを示します。その後、コード ジェネレーターは、このグローバル変数の使用と一致するコードを生成できます。
メモ
-global
フラグは、コード生成でのみサポートされます。MATLAB 関数ブロックで coder.ceval
の呼び出し中にこのフラグを含めることはできません。
coder.ceval(
は引数 '-global'
,cfun_name
,cfun_arguments
)cfun_arguments
を使用して cfun_name
を実行し、cfun_name
が 1 つ以上の MATLAB グローバル変数を使用することを示します。
coder.ceval(
により、CUDA® の GPU 関数 '-gpudevicefcn'
,devicefun_name,devicefun_arguments)__device__
をカーネル内から呼び出すことができます。'-gpudevicefcn'
は coder.ceval
に対して、ターゲット関数が GPU デバイス上であることを示します。devicefun_name
は関数 __device__
の名前であり、devicefun_arguments
は devicefun_name
が求める順番の入力引数のコンマ区切りのリストです。このオプションには GPU Coder™ 製品が必要です。
coder.ceval(
は、引数 '-layout:rowMajor'
,cfun_name
,cfun_arguments
)cfun_arguments
を使用して cfun_name
を実行し、行優先のレイアウトで保存されたデータを渡します。列優先のレイアウトを使用する関数から呼び出されると、コード ジェネレーターは入力を行優先のレイアウトに変換し、出力を列優先のレイアウトに変換します。構文を短くするには、coder.ceval('-row',...)
を使用します。
coder.ceval(
は、引数 '-layout:columnMajor'
,cfun_name
,cfun_arguments
)cfun_arguments
を使用して cfun_name
を実行し、列優先のレイアウトで保存されたデータを渡します。行優先のレイアウトを使用する関数から呼び出されると、コード ジェネレーターは入力を列優先のレイアウトに変換し、出力を行優先のレイアウトに変換します。構文を短くするには、coder.ceval('-col',...)
を使用します。
coder.ceval(
は、引数 '-layout:any'
,cfun_name
,cfun_arguments
)cfun_arguments
を使用して cfun_name
を実行し、配列のレイアウトが一致しない場合でも、現在の配列レイアウトを使用してデータを渡します。コード ジェネレーターは入力データまたは出力データの配列レイアウトを変換しません。
cfun_return = coder.ceval(___)
は cfun_name
を実行し、C/C++ 関数が return
ステートメントで返す値に対応する 1 つのスカラー値 cfun_return
を返します。C/C++ との一貫性をもたせるため、coder.ceval
はスカラー値のみを返すことができます。配列を返すことはできません。このオプションは、前述の構文のすべての入力引数の組み合わせで使用できます。
例
入力引数
制限
coder.extrinsic
を使用して外部関数として宣言した関数では、coder.ceval
を使用することはできません。LCC コンパイラはライブラリの作成時にライブラリ関数の名前の前にアンダースコアを追加します。ライブラリのコンパイラが LCC で、コード生成に LCC 以外のコンパイラを使用する場合は、たとえば
coder.ceval('_mylibfun')
のように、関数名の前にアンダースコアを追加しなければなりません。ライブラリのコンパイラが LCC 以外の場合、そのライブラリの関数を呼び出す MATLAB コードから LCC を使用してコードを生成することはできません。それらのライブラリ関数の名前には、先頭に LCC コンパイラで必要なアンダースコアが付いていません。プロパティに get メソッド、set メソッド、または検証関数がある場合、またはプロパティが特定の属性をもつ System object™ プロパティである場合、そのプロパティを外部関数に参照で渡すことはできません。一部のプロパティでサポートされない参照渡しを参照してください。
可変サイズの行列は、行優先のコード生成ではエントリポイント パラメーターとしてサポートされていません。
ヒント
コード生成では、
coder.ceval
を呼び出す前に、戻り値と出力引数の型、サイズ、実数/複素数のデータ型を指定しなければなりません。ポインター、
FILE
型のファイル I/O、C/C++ マクロなど、MATLAB コードに存在しない変数を受け入れる関数や返す関数にcoder.ceval
を適用するには、関数coder.opaque
を使用します。coder.ceval
は、MATLAB でのコード生成のみに使用してください。コンパイルされていない MATLAB コードでは、coder.ceval
はエラーを生成します。MATLAB 関数が MATLAB で実行されているかどうかを判断するには、coder.target
を使用します。関数が MATLAB で実行されている場合、MATLAB バージョンの C/C++ 関数を呼び出します。coder.ceval
を使用して呼び出される外部コードと生成コードは、同じプロセス内で実行され、メモリを共有します。生成コードで使用されるデータ構造体を含むメモリに外部コードが誤って書き込みを行うと、プロセスが予期しない動作をするか、クラッシュする可能性があります。たとえば、外部コードが終点より後の配列にデータを書き込もうとすると、プロセスが予期しない動作をするか、クラッシュする可能性があります。MATLAB は Windows® プラットフォームで UTF-8 をシステム エンコードとして使用します。その結果、生成された MEX 関数内から行われたシステム呼び出しは、UTF-8 で符号化された文字列を受け入れて返します。一方、MATLAB Coder で生成されたコードは、Windows ロケールで指定されたエンコードを使用してテキスト データを符号化します。このため、MATLAB のエントリポイント関数が
coder.ceval
(MATLAB Coder) を使用して異なるシステム エンコードを想定する外部 C/C++ 関数を呼び出すと、生成された MEX 関数から文字化けが発生する可能性があります。これが発生した場合は、外部 C/C++ 関数を更新してこの状況に対処する必要があります。
拡張機能
バージョン履歴
R2011a で導入
参考
coder.ref
| coder.rref
| coder.wref
| coder.target
| coder.extrinsic
| coder.opaque
| coder.updateBuildInfo
| coder.ExternalDependency
| coder.reservedName
(MATLAB Coder)