exponenta event banner

Подключение C++ к работающему сеансу MATLAB

Модуль C++ можно подключить к общим сеансам MATLAB ®, которые выполняются на локальном компьютере. Для подключения к общему сеансу MATLAB:

Если при вызове не указано имя общего сеанса MATLAB matlab::engine::connectMATLAB или matlab::engine::connectMATLABAsyncмеханизм использует первый созданный общий сеанс 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::findMATLAB или matlab::engine::findMATLABAsync чтобы найти имя.

Например, запустите MATLAB и назовите общий сеанс myMatlabEngine.

matlab -r "matlab.engine.shareEngine('myMatlabEngine')"

Этот пример кода подключается к сеансу MATLAB с именем myMatlabEngine от C++.

Примечание

Запустите именованный сеанс MATLAB перед подключением из кода C++.

#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.

Этот пример кода пытается найти общий сеанс MATLAB с именем myMatlabEngine и подключается к нему, если сеанс найден.

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;
    }
}

См. также

| | | |

Связанные темы