Вы можете подключить механизм C++ к общему MATLAB® сеансы, выполняемые на локальном компьютере. Для подключения к общему сеансу работы с MATLAB:
Запустите MATLAB как сеанс совместной работы или сделайте текущий процесс MATLAB общим с помощью matlab.engine.shareEngine
Функция MATLAB.
Поиск имен сеансов совместной работы MATLAB с помощью matlab::engine::findMATLAB
или matlab::engine::findMATLABAsync
.
Передайте matlab::engine::String
содержащее имя общего сеанса работы с MATLAB для matlab::engine::connectMATLAB
или matlab::engine::connectMATLABAsync
функции представителя. Эти функции соединяют механизм C++ с сеансом совместной работы.
Если вы не задаете имя общего сеанса работы с MATLAB при вызове matlab::engine::connectMATLAB
или matlab::engine::connectMATLABAsync
, механизм использует первый созданный общий сеанс работы с MATLAB. Если нет доступных общих сеансов работы с MATLAB, механизм создает общий сеанс работы с MATLAB и подключается к этому сеансу.
Для получения информации о том, как настроить и создать программы C++ engine, смотрите Сборка программ C++ Engine.
Этот пример кода соединяется с первым найденным общим сеансом работы с MATLAB.
#include "MatlabEngine.hpp"
void syncConnect() { using namespace matlab::engine; // Connect to shared MATLAB session std::unique_ptr<MATLABEngine> matlabPtr = connectMATLAB(); }
Этот пример кода соединяется с первым общим сеансом работы с 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 перед подключением из кода С++.
#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; } }
matlab.engine.shareEngine
| matlab::engine::connectMATLAB
| matlab::engine::connectMATLABAsync
| matlab::engine::findMATLAB
| matlab::engine::findMATLABAsync