Execute MATLAB Statements from MEX Function - MATLAB & Simulink (original) (raw)
Main Content
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 anstd::u16string
. Use the u"..."
UTF-16 literal string encoding or the utility function matlab::engine::convertUTF8StringToUTF16String to convert anstd::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:')