Main Content

MEX 関数からの MATLAB ステートメントの実行

MEX 関数は、呼び出し元関数のワークスペースで MATLAB® ステートメントを実行できます。呼び出し元関数のワークスペースでステートメントを評価することで、MEX 関数は、実行先のワークスペース内で変数を作成または変更できます。また MEX 関数は、現在のフォルダーを変更するなど環境の変更も可能です。

MATLAB ステートメントは、呼び出し元関数のワークスペースの範囲内にある任意の変数にアクセスできます。MEX 関数が MATLAB ベース ワークスペースから呼び出された場合、ステートメントはベース ワークスペースのコンテキストで評価されます。

MEX 関数から MATLAB ステートメントを実行するには、関数 matlab::engine::MATLABEngine::eval を使用します。MATLAB 関数に引数を渡す必要がないか、または MEX 関数に引数を戻す必要がない場合は、eval を使用します。

MATLAB ステートメントを std::u16string として eval に渡します。std::stringstd::u16string に変換するには、u"..." UTF-16 リテラル文字列エンコードまたはユーティリティ関数 matlab::engine::convertUTF8StringToUTF16String を使用します。string 内で名前がつけられた関数と入力引数は、呼び出し元のワークスペースになければなりません。

次のコード スニペットは、eval を使用して MATLAB ステートメントを実行する方法を示します。これらのステートメントは、現在のフォルダーを MATLAB パスに追加してから、MATLAB 作業フォルダーを、Windows システムのドライブ H にマッピングされたフォルダーに変更します。バックスラッシュ文字の前にあるエスケープ ("\") 文字に注目してください。

std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine();
matlabPtr->eval(u"currentFolder = pwd;");
matlabPtr->eval(u"addpath(currentFolder);");
matlabPtr->eval(u"cd('H:\\')");

以下は等価の MATLAB コードです。

currentFolder = pwd;
addpath(currentFolder);
cd('H:\')

参考

| | |

関連するトピック