最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
mxArray
を使用して、R2017b 以前の MATLAB® と連携して動作する C プログラムを作成MATLAB コマンド ラインからユーザー独自の C または C++ プログラムを組み込み関数のように呼び出すことができます。これらのプログラムは MEX 関数と呼ばれ、関数名は MEX ファイル名です。MEX 関数はすべてのアプリケーションに適しているわけではありません。MATLAB は、コンパイル言語での時間のかかる低水準プログラミングの排除を専門とする、生産性の高い環境です。通常、プログラミングは MATLAB で行ってください。アプリケーションで必要な場合を除き、MEX 関数は使用しないでください。
MEX 関数を作成するには、MATLAB API を使用してプログラムを作成します。これらのライブラリの関数は、MEX 関数とワークスペース間でデータの転送をしやすくします。MATLAB API を選択するには、以下を検討してください。
MathWorks では、MATLAB データ APIで定義されているように、最新の C ++ 機能を使用して MEX 関数を作成することを推奨します。詳細については、C++ MEX アプリケーションを参照してください。
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/C++ プログラムから MATLAB のデータの読み取りおよび書き込みを行うには、MATLAB C API での MAT ファイル データの読み取りを使用します。
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 | MEX 関数の完了後に MATLAB ソフトウェアが割り当てたメモリを存続させる |
この例では、C 行列 API でビルドされた arrayProduct
C MEX 関数の作成方法を説明します。
MEX 関数の例のソース コードへのリンク。
MEX ファイルでの mxArray
の使用。
mxArray
メモリを管理するためのルール。
C 行列 API でビルドされた MEX 関数を作成する際に考慮すべき C++ 言語の問題。
関数 mexErrMsgIdAndTxt
を使用してエラー情報を出力する。
MEX ファイル プログラムで 64 ビット ファイル I/O を使用する方法。
MEX ファイルの入力引数から組み込み型のサブクラスを排除する方法。
この例では、C MEX 関数の例 arrayProduct
をビルドする方法を説明します。
インターリーブされた複素数 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
から "オブジェクト" に変わります。
この例では、Microsoft® Visual C++® コンパイラを使用して Windows® プラットフォームでビルドした MEX ファイル xtimesy
について、ドキュメントを作成する方法を説明します。
コンパイラ設定およびビルド エラーの診断を補助するため、詳細オプション -v を指定して関数 mex
を呼び出します。
MEX ファイルのコンパイルが失敗した場合の対処方法。
警告とエラー メッセージの詳細情報。
C/C++ MEX ファイルを MinGW -w64 でコンパイルする際のトラブルシューティングと制限
MinGW-w64 コンパイラでビルドされた MEX ファイルのトラブルシューティング。
すべての MEX ファイルに mexFunction
が必要です。
無効な MEX ファイル エラーが発生した場合の対処方法。
最良の結果を得るには、使用している MATLAB バージョンで作成された MEX ファイルを実行します。
別のソースからバイナリ MEX ファイルを取得する場合は、そのファイルが、ファイルを実行するプラットフォーム用にコンパイルされていることを確認してください。
MATLAB の単一セッションを MEX ファイルから別のスレッドで呼び出さないでください。
MEX ファイルが原因でセグメンテーション違反またはアサーションが発生した場合の対処方法。
MEX で間違った応答が生成される場合の対処方法。
Microsoft Windows プラットフォームでのデバッグ
Microsoft Visual Studio® でのデバッグに関する推奨事項。
この例では、Mac プラットフォームで MEX ファイルをデバッグする方法を説明します。
この例では、Linux® プラットフォームで MEX ファイルをデバッグする方法を説明します。