Перенаправление окна Команды MATLAB Вывод на C++

MATLAB® отображает сообщения об ошибке и выход от операторов в окне команды MATLAB. Чтобы перенаправить этот выход к вашей программе C++, используйте буфер строки, чтобы получить этот выход и возвратить его с feval, fevalAsync, eval или evalAsync функцией членства.

Для получения информации о том, как установить и создать программы механизма C++, видит Сборку Программы Engine C++.

Перенаправьте экранируют Вывод

Этот пример кода оценивает два оператора в MATLAB. Эти операторы создают три переменные в рабочем пространстве MATLAB. Код вызывает MATLAB whos функция, которая отображает текущие переменные рабочей области в окне команды MATLAB. Получите стандартный вывод MATLAB в буфере строки путем передачи указателя на буфер с вызовом 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 MATLAB data array factory
    matlab::data::ArrayFactory factory;

    // 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;
}

Перенаправление вывода ошибок

Этот пример кода вызывает ошибку MATLAB путем ссылки на переменную после очищения всех переменных из рабочего пространства MATLAB. Буфер строки передал 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;
    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;
    }
}

Смотрите также

| | |

Похожие темы