最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

C MEX ファイル アプリケーション

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 ファイル データの読み取りを使用します。

関数

mexMEX 関数またはエンジン アプリケーションのビルド
dbmexUNIX プラットフォーム上で MEX ファイルのデバッグを有効にする

C MEX API

mexFunctionC 行列 API で作成された C/C++ MEX 関数へのエントリ ポイント
mexFunctionName現在の MEX 関数の名前
mexAtExitMEX 関数のクリア時または MATLAB の終了時に呼び出す関数を登録
mexCallMATLABMATLAB 関数、ユーザー定義関数または MEX 関数の呼び出し
mexCallMATLABWithTrapMATLAB 関数、ユーザー定義関数、または MEX ファイルの呼び出しとエラー情報の取得
mexEvalString呼び出し側ワークスペース内での MATLAB コマンドの実行
mexEvalStringWithTrap呼び出し側のワークスペースで MATLAB コマンドを実行し、エラー情報を取得する
mexGetVariable指定されたワークスペースからの変数のコピー
mexGetVariablePtr別のワークスペースからの変数への読み取り専用ポインター
mexPutVariableMEX 関数から指定されたワークスペースへの配列
mexGet指定されたグラフィックス プロパティの値
mexSet指定されたグラフィックス プロパティの値の設定
mexPrintfANSI C PRINTF スタイル出力ルーチン
mexErrMsgIdAndTxt識別子と共にエラー メッセージを表示し、MATLAB プロンプトに戻る
mexWarnMsgIdAndTxt識別子を含む警告メッセージ
mexIsLockedMEX ファイルがロックされているかどうかを判別
mexLockメモリからの MEX ファイルのクリアを防ぐ
mexUnlockメモリからの MEX ファイルのクリアを許可する
mexMakeArrayPersistentMEX ファイルの完了後も配列を存続させる
mexMakeMemoryPersistentMEX 関数の完了後に MATLAB ソフトウェアが割り当てたメモリを存続させる

トピック

C MEX 関数の記述

C ソース MEX ファイルの作成

この例では、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 ファイルの入力引数から組み込み型のサブクラスを排除する方法。

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 で間違った応答が生成される場合の対処方法。

デバッグ

Mac プラットフォームでのデバッグ

この例では、Mac プラットフォームで MEX ファイルをデバッグする方法を説明します。

Linux プラットフォームでのデバッグ

この例では、Linux® プラットフォームで MEX ファイルをデバッグする方法を説明します。