Redirect MATLAB Command Window Output to C++
MATLAB® displays error messages and the output from statements in the MATLAB command window. These examples show how to redirect this output to your C++ program using a string buffer to capture this output and return it with the feval, fevalAsync, eval, or evalAsync member functions.
For information on how to setup and build C++ engine programs, see Requirements to Build C++ Engine Applications.
Redirect Screen Output
This example evaluates two statements in MATLAB. These statements create three variables in the MATLAB workspace. The code calls the MATLAB
whos
function, which displays the
current workspace variables in the MATLAB command window. Capture MATLAB standard output in a string buffer by passing a pointer to the buffer
with the call to MATLABEngine::eval
.
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void screenOutput() {
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
// Evaluate statements that create variables
matlabPtr->eval(u"[X,Y] = meshgrid(-2:.2:2);");
matlabPtr->eval(u"Z = X.*exp(-X.^2 - Y.^2);");
// Create string buffer for standard output
typedef std::basic_stringbuf<char16_t> StringBuf;
std::shared_ptr<StringBuf> output = std::make_shared<StringBuf>();
// Display variables in the MATLAB workspace
matlabPtr->eval(u"whos", output);
// Display MATLAB output in C++
String output_ = output.get()->str();
std::cout << convertUTF16StringToUTF8String(output_) << std::endl;
}
Redirect Error Output
This example causes a MATLAB error by referencing a variable after clearing all variables from the
MATLAB workspace. The string buffer passed to the
MATLABEngine::eval
member function captures the error message
inside a try/catch code block.
#include "MatlabDataArray.hpp"
#include "MatlabEngine.hpp"
#include <iostream>
void errorOutput() {
using namespace matlab::engine;
// Start MATLAB engine synchronously
std::unique_ptr<MATLABEngine> matlabPtr = startMATLAB();
// Create string buffer for standard output
typedef std::basic_stringbuf<char16_t> StringBuf;
std::shared_ptr<StringBuf> error = std::make_shared<StringBuf>();
// Evaluate statement that causes error
matlabPtr->eval(u"clear");
try {
matlabPtr->eval(u"x + 2;", {}, error);
}
catch (...) {
String error_ = error.get()->str();
std::cout << convertUTF16StringToUTF8String(error_) << std::endl;
}
}
See Also
matlab::engine::MATLABEngine
| matlab::engine::startMATLAB
| matlab::engine::convertUTF16StringToUTF8String