Можно соединить механизм C++ с разделяемыми сеансами MATLAB®, которые работают на локальной машине. Соединяться с разделяемым сеансом работы с MATLAB:
Запустите MATLAB как сеанс совместной работы или сделайте совместно использованное использование процесса рабочего MATLAB функции MATLAB matlab.engine.shareEngine
.
Найдите имена сеансов совместной работы MATLAB с помощью matlab::engine::findMATLAB
или matlab::engine::findMATLABAsync
.
Передайте matlab::engine::String
, содержащий имя разделяемого сеанса работы с MATLAB к функции членства matlab::engine::connectMATLABAsync
или matlab::engine::connectMATLAB
. Эти функции соединяют механизм C++ с сеансом совместной работы.
Если вы не задаете имя разделяемого сеанса работы с MATLAB при вызове matlab::engine::connectMATLAB
или matlab::engine::connectMATLABAsync
, механизм использует первый разделяемый созданный сеанс работы с MATLAB. Если нет никаких разделяемых доступных сеансов работы с MATLAB, механизм создает разделяемый сеанс работы с MATLAB и подключения к этому сеансу.
Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.
Этот пример кода соединяется с первым разделяемым найденным сеансом работы с 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 matlab.engine.shareEngine
. Выполнение так избавляет от необходимости использовать 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.connect_matlab
| mATLABEngine:: connectMatlabAsync
| mATLAB engine.find_matlab
| mATLABEngine:: findMATLABAsync