Main Content

Redirigir salida de ventana de comandos a C++MATLAB

muestra los mensajes de error y la salida de las sentencias en la ventana de mandatos.MATLAB®MATLAB Para redirigir esta salida a su programa de C++, use un búfer de cadena para capturar esta salida y devolverla con la,, o función miembro.fevalfevalAsyncevalevalAsync

Para obtener información sobre cómo configurar y compilar programas de motor de C++, vea.Compilar programas de motor de C++

Redirigir la salida de pantalla

Este código de ejemplo evalúa dos instrucciones en.MATLAB Estas instrucciones crean tres variables en el área de trabajo.MATLAB El código llama a la función, que muestra las variables de espacio de trabajo actuales en la ventana de comandos.MATLABwhosMATLAB Capture la salida estándar en un búfer de cadena pasando un puntero al búfer con la llamada a.MATLABMATLABEngine::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 MATLAB data array factory     matlab::data::ArrayFactory factory;      // Create string buffer for standard output     typedef std::basic_stringbuf<char16_t> StringBuf;     auto 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; }

Salida de error de redirección

Este código de ejemplo produce un error haciendo referencia a una variable después de borrar todas las variables del área de trabajo.MATLABMATLAB El búfer de cadena pasado a la función miembro captura el mensaje de error dentro de un bloque de código try/catch.MATLABEngine::eval

#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 MATLAB data array factory     matlab::data::ArrayFactory factory;      // Create string buffer for standard output     typedef std::basic_stringbuf<char16_t> StringBuf;     auto 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;     } }

Consulte también

| | |

Temas relacionados