実行中の MATLAB セッションへの C++ の接続
次の例では、ローカル マシンで実行中の共有 MATLAB® セッションに C++ エンジンを接続する方法を説明します。共有 MATLAB セッションに接続するには、以下を実行します。
MATLAB を共有セッションとして起動するか、MATLAB 関数
matlab.engine.shareEngineを使用して実行中の MATLAB プロセスを共有にします。matlab::engine::findMATLABまたはmatlab::engine::findMATLABAsyncを使用して、共有 MATLAB セッションの名前を検索します。共有 MATLAB セッションの名前を含む
matlab::engine::Stringをメンバー関数matlab::engine::connectMATLABまたはメンバー関数matlab::engine::connectMATLABAsyncに渡します。これらの関数は C++ エンジンを共有セッションに接続します。
matlab::engine::connectMATLAB や matlab::engine::connectMATLABAsync を呼び出す際に共有 MATLAB セッションの名前を指定しない場合、エンジンは最初に作成された共有 MATLAB セッションを使用します。使用可能な共有 MATLAB セッションがない場合、エンジンは共有 MATLAB セッションを作成し、このセッションに接続します。
C++ エンジン プログラムを設定およびビルドする方法の詳細については、Requirements to Build C++ Engine Applicationsを参照してください。
共有 MATLAB への接続
この例では、最初に見つかった共有 MATLAB セッションに接続します。
#include "MatlabEngine.hpp"
void syncConnect() {
using namespace matlab::engine;
// Connect to shared MATLAB session
std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB();
}共有 MATLAB への非同期的な接続
この例では、最初に見つかった共有 MATLAB セッションに非同期的に接続します。
#include "MatlabEngine.hpp"
void asyncConnect() {
using namespace matlab::engine;
// Find and connect to shared MATLAB session
FutureResult<std::unique_ptr<MATLABEngine>> futureMATLAB = connectMATLABAsync();
...
std::unique_ptr<MATLABEngine> matlabPtr = futureMATLAB.get();
}共有セッションの名前の指定
この例では、MATLAB 関数 matlab.engine.shareEngine の実行時に、共有 MATLAB セッションの名前を指定する方法を説明します。これにより、matlab::engine::findMATLAB や matlab::engine::findMATLABAsync を使用して名前を検索する必要がなくなります。
たとえば、MATLAB を起動して、共有セッションに myMatlabEngine という名前を指定します。
matlab -r "matlab.engine.shareEngine('myMatlabEngine')"次のサンプル コードは、C++ から myMatlabEngine という名前の MATLAB セッションに接続します。
メモ
C++ コードから接続する前に、名前付き MATLAB セッションを開始してください。
#include "MatlabEngine.hpp"
void connectToML() {
using namespace matlab::engine;
// Connect to named shared MATLAB session started as:
// matlab -r "matlab.engine.shareEngine('myMatlabEngine')"
std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(u"myMatlabEngine");
}名前付き共有セッションの検索と接続
名前付き MATLAB 共有セッションに接続するには、matlab::engine::findMATLAB や matlab::engine::findMATLABAsync を使用して利用可能なすべての名前付き MATLAB 共有セッションの名前を検索します。
この例では、myMatlabEngine という名前の MATLAB 共有セッションを検索し、見つかった場合、それに接続します。
void findNConnect() {
using namespace matlab::engine;
// Find and connect to shared MATLAB session
std::unique_ptr<MATLABEngine> matlabPtr;
std::vector<String> names = findMATLAB();
std::vector<String>::iterator it;
it = std::find(names.begin(), names.end(), u"myMatlabEngine");
if (it != names.end()) {
matlabPtr = connectMATLAB(*it);
}
// Determine if engine connected
if (matlabPtr){
matlab::data::ArrayFactory factory;
matlab::data::CharArray arg = factory.createCharArray("-release");
matlab::data::CharArray version = matlabPtr->feval(u"version", arg);
std::cout << "Connected to: " << version.toAscii() << std::endl;
}
else {
std::cout << "myMatlabEngine not found" << std::endl;
}
}複数スレッド環境での接続
複数スレッド環境で共有 MATLAB セッションに以下の接続を行うことができます。
C++ アプリケーションの個別スレッドから異なる共有 MATLAB セッションに接続する。
複数のエンジン アプリケーションから MATLAB の単一セッションに接続する。
同じプロセスの複数のスレッドを使用して単一の共有 MATLAB セッションに接続することはできません。
参考
matlab::engine::findMATLAB | matlab::engine::findMATLABAsync | matlab.engine.shareEngine | matlab::engine::connectMATLAB | matlab::engine::connectMATLABAsync