Main Content

実行中の MATLAB セッションへの C++ の接続

ローカル マシンで実行中の共有 MATLAB® セッションに C++ エンジンを接続することができます。共有 MATLAB セッションに接続するには、以下を実行します。

matlab::engine::connectMATLABmatlab::engine::connectMATLABAsync を呼び出す際に共有 MATLAB セッションの名前を指定しない場合、エンジンは最初に作成された共有 MATLAB セッションを使用します。使用可能な共有 MATLAB セッションがない場合、エンジンは共有 MATLAB セッションを作成し、このセッションに接続します。

C++ エンジン プログラムを設定およびビルドする方法の詳細については、C++ エンジン プログラムのビルド要件を参照してください。

共有 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::findMATLABmatlab::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::findMATLABmatlab::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 セッションに接続することはできません。

参考

| | | |

関連するトピック