MEX functions can execute MATLAB® statements in the calling function workspace. Evaluating statements in the workspace of the calling function enables MEX functions to create or modify variables in the workspace in which it executes. MEX functions can also modify the environment, for instance by changing the current folder.
The MATLAB statements can access any variables that are in scope in the calling function workspace. If the MEX function is called from the MATLAB base workspace, then the statements are evaluated in the context of that workspace.
To execute MATLAB statements from a MEX function, use the matlab::engine::MATLABEngine::eval function. Use
eval when you do not need to pass arguments to a MATLAB function or return arguments to the MEX function.
Pass the MATLAB statement to
eval as an
std::u16string. Use the
u"..." UTF-16 literal string encoding or the utility function
matlab::engine::convertUTF8StringToUTF16String to convert an
std::string to an
std::u16string. The functions and input arguments named in the string must exist in the caller's workspace.
This code snippet shows how to use
eval to execute MATLAB statements. These statements add the current folder to the MATLAB path and then change the MATLAB working folder to the one mapped to drive
H on a Windows system. Note the escape ("\") character in front of the backslash character.
std::shared_ptr<matlab::engine::MATLABEngine> matlabPtr = getEngine(); matlabPtr->eval(u"currentFolder = pwd;"); matlabPtr->eval(u"addpath(currentFolder);"); matlabPtr->eval(u"cd('H:\\')");
Here is the equivalent MATLAB code.
currentFolder = pwd; addpath(currentFolder); cd('H:\')