MEX-функции могут выполнять MATLAB® операторы в рабочей области вызывающей функции. Оценка операторов в рабочей области вызывающей функции позволяет MEX-функциям создавать или изменять переменные в рабочей области, в которой она выполняется. MEX-функции могут также изменять окружение, например, изменяя текущую папку.
Выражения MATLAB могут получить доступ к любым переменным, которые возможности в вызов функции рабочей области. Если MEX-функция вызывается из базового рабочего пространства MATLAB, операторы оцениваются в контексте этой рабочей области.
Чтобы выполнить выражения MATLAB из MEX-функции, используйте функцию matlab:: engine:: MATLABEngine:: eval. Использование eval
если вам не нужно передавать аргументы в функцию MATLAB или возвращать аргументы в MEX-функцию.
Передайте выражение MATLAB в eval
как std::u16string
. Используйте u"..."
UTF-16 кодировку строк литералов или служебную функцию matlab::engine::convertUTF8StringToUTF16String
для преобразования std::string
в std::u16string
. Функции и входные параметры, названные в строке, должны существовать в рабочей области вызывающего абонента.
Этот фрагмент кода показывает, как использовать eval
для выполнения выражений MATLAB. Эти операторы добавляют текущую папку в путь MATLAB, а затем заменяют рабочую папку MATLAB на папку, сопоставленную с диском H
в системе Windows. Обратите внимание на символ escape («\») перед символом обратной косой черты.
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine(); matlabPtr->eval(u"currentFolder = pwd;"); matlabPtr->eval(u"addpath(currentFolder);"); matlabPtr->eval(u"cd('H:\\')");
Вот эквивалентный код MATLAB.
currentFolder = pwd;
addpath(currentFolder);
cd('H:\')
addpath
| cd
| matlab:: engine:: MATLABEngine:: feval | pwd