このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
MATLAB (MEX ファイル) から呼び出せる C 関数の記述
mxArray
を使用して MATLAB 変数にアクセスし、MATLAB に返す配列を作成するMATLAB コマンド ラインからユーザー独自の C プログラムを組み込み関数のように呼び出すことができます。これらのプログラムは MEX 関数と呼ばれ、関数名は MEX ファイル名です。MEX 関数はすべてのアプリケーションに適しているわけではありません。MATLAB は、コンパイル言語での時間のかかる低水準プログラミングの排除を専門とする、生産性の高い環境です。通常、プログラミングは MATLAB で行ってください。アプリケーションで必要な場合を除き、MEX 関数は使用しないでください。
MEX 関数を作成するには、MATLAB API を使用してプログラムを作成します。これらのライブラリの関数は、MEX 関数とワークスペース間でデータの転送をしやすくします。MATLAB API を選択するには、以下を検討してください。
C++ 用の MATLAB データ APIで定義されているように、最新の C++ 機能を使用して MEX 関数を作成します。詳細については、MATLAB (MEX ファイル) から呼び出せる C++ 関数の記述を参照してください。
MEX 関数を R2017b 以前の MATLAB で実行しなければならない場合、または C 言語での作業が望ましい場合は、C 行列 APIおよび C MEX API の関数を使用してください。これらの API は MATLAB
mxArray
データ構造体を使用します。このページの関数とトピックはmxArray
を基にしています。
メモ
C 行列 API または MATLAB データ API のいずれかから関数を選択してください。これらの API の関数を混用することはできません。
関数 mex
を使用してソース ファイルから実行可能プログラムをビルドします。また、MEX ファイルは他の MATLAB ユーザーと共有できます。
S-Function 作成の詳細については、Simulink® ドキュメンテーションを参照してください。
他のユーザーが作成した MEX 関数を呼び出すには、MEX 関数の呼び出しを参照してください。
C/C++ プログラムから MATLAB 関数を呼び出す場合、いずれかのエンジン API を使用します。詳細については、以下を参照してください。
C プログラムから MATLAB のデータの読み取りおよび書き込みを行うには、MAT ファイル データを読み取る C プログラムの作成を参照してください。
C MEX API
mexFunction | C 行列 API で作成された C/C++ MEX 関数へのエントリ ポイント |
mexFunctionName | 現在の MEX 関数の名前 |
mexAtExit | MEX 関数のクリア時または MATLAB の終了時に呼び出す関数を登録 |
mexCallMATLAB | MATLAB 関数、ユーザー定義関数または MEX 関数の呼び出し |
mexCallMATLABWithTrap | MATLAB 関数、ユーザー定義関数、または MEX ファイルの呼び出しと、エラー情報の取得 |
mexEvalString | 呼び出し側ワークスペース内での MATLAB コマンドの実行 |
mexEvalStringWithTrap | 呼び出し側のワークスペースで MATLAB コマンドを実行し、エラー情報を取得する |
mexGetVariable | 指定されたワークスペースからの変数のコピー |
mexGetVariablePtr | 別のワークスペースからの変数への読み取り専用ポインター |
mexPutVariable | MEX 関数から指定されたワークスペースへの配列 |
mexGet | 指定されたグラフィックス プロパティの値 |
mexSet | 指定されたグラフィックス プロパティの値の設定 |
mexPrintf | ANSI C PRINTF スタイル出力ルーチン |
mexErrMsgIdAndTxt | 識別子と共にエラー メッセージを表示し、MATLAB プロンプトに戻る |
mexWarnMsgIdAndTxt | 識別子を含む警告メッセージ |
mexIsLocked | MEX ファイルがロックされているかどうかの判別 |
mexLock | メモリからの MEX ファイルのクリアの防止 |
mexUnlock | メモリからの MEX ファイルのクリアを許可 |
mexMakeArrayPersistent | MEX ファイルの完了後も配列を存続させる |
mexMakeMemoryPersistent | MATLAB によって割り当てられたメモリを MEX 関数の完了後も存続させる |
トピック
C MEX 関数の記述
- C ソース MEX ファイル arrayProduct.c の作成
この例では、C 行列 API でビルドされた
arrayProduct
C MEX 関数の作成方法を説明します。 - MEX 関数のソース コード例の表
MEX 関数の例のソース コードへのリンク。
- MATLAB データ
MEX ファイルでの
mxArray
の使用。 - メモリ管理の問題
mxArray
メモリを管理するためのルール。 - C 行列 API を使用した C++ MEX 関数の作成
C 行列 API でビルドされた MEX 関数を作成する際に考慮すべき C++ 言語の問題。 - C MEX ファイルでのエラー処理
関数mexErrMsgIdAndTxt
を使用してエラー情報を出力する。 - MEX ファイルでの大規模なファイル I/O の処理
MEX ファイル プログラムで 64 ビット ファイル I/O を使用する方法。 - 最派生クラスのテスト
MEX ファイルの入力引数から組み込み型のサブクラスを排除する方法。
ビルド環境のテスト
- C MEX 関数のビルド
この例では、C MEX 関数の例
arrayProduct
をビルドする方法を説明します。
C 行列 API のバージョン
- インターリーブされた複素数 API を使用するように MEX ファイルをアップグレード
MATLAB Version 9.4 (R2018a) では、インターリーブされた複素数表現をサポートします。
- 64 ビット API を使用するように MEX ファイルをアップグレード
MATLAB Version 9.2 (R2017a) では、既定で 64 ビット API を使用して MEX ファイルをビルドします。
- グラフィックス オブジェクトを使用するための MEX ファイルのアップグレード
MATLAB Version 8.4 (R2014b) では、グラフィックス オブジェクトのハンドルのデータ型がdouble
から "オブジェクト" に変わります。
MEX ファイルの共有
- MEX ファイルのビルド情報のドキュメント化
この例では、Microsoft® Visual C++® コンパイラを使用して Windows® プラットフォームでビルドした MEX ファイルxtimesy
について、ドキュメントを作成する方法を説明します。
トラブルシューティング
ビルド エラー
- MEX エラー時のヘルプの参照
コンパイラ設定およびビルド エラーの診断を補助するため、詳細オプション -v を指定して関数mex
を呼び出します。 - MEX ファイルのコンパイルの失敗
MEX ファイルのコンパイルが失敗した場合の対処方法。 - MEX API の非互換のトラブルシューティング
警告とエラー メッセージの詳細情報。 - C/C++ MEX ファイルを MinGW -w64 でコンパイルする際のトラブルシューティングと制限
MinGW-w64 コンパイラでビルドされた MEX ファイルのトラブルシューティング。 - シンボル mexFunction が未解決または未定義
すべての MEX ファイルにmexFunction
が必要です。
実行時エラー
- 無効な MEX ファイル エラー
無効な MEX ファイル エラーが発生した場合の対処方法。 - MEX のバージョン互換性
最良の結果を得るには、使用している MATLAB バージョンで作成された MEX ファイルを実行します。 - MEX プラットフォームの互換性
別のソースからバイナリ MEX ファイルを取得する場合は、そのファイルが、ファイルを実行するプラットフォーム用にコンパイルされていることを確認してください。 - スレッド セーフでない MEX API
MATLAB の単一セッションを MEX ファイルから別のスレッドで呼び出さないでください。 - MEX ファイルのセグメンテーション違反
MEX ファイルが原因でセグメンテーション違反またはアサーションが発生した場合の対処方法。 - MEX ファイルが正しい結果を生成しない
MEX で間違った応答が生成される場合の対処方法。
デバッグ
- Microsoft Windows プラットフォームでのデバッグ
Microsoft Visual Studio® でのデバッグに関する推奨事項。 - Mac プラットフォームでのデバッグ
この例では、Mac プラットフォームで MEX ファイルをデバッグする方法を説明します。 - Linux プラットフォームでのデバッグ
この例では、Linux® プラットフォームで MEX ファイルをデバッグする方法を説明します。