主要内容

重定向MATLAB命令窗口输出到c++

MATLAB®在MATLAB命令窗口中显示错误消息和语句的输出。要将此输出重定向到您的c++程序,请使用字符串缓冲区捕获此输出并将其与函数宏指令fevalAsynceval,或evalAsync成员函数。

有关如何设置和构建c++引擎程序的信息,请参见构建c++引擎程序的要求

重定向屏幕输出

这个示例代码在MATLAB中计算两个语句。这些语句在MATLAB工作空间中创建了三个变量。代码调用MATLAB函数,该函数在MATLAB命令窗口中显示当前工作空间变量。通过将指针传递给调用的缓冲区来捕获字符串缓冲区中的MATLAB标准输出MATLABEngine: eval

#包括“MatlabDataArray.hpp”#包括“MatlabEngine.hpp”#
void screenOutput(){使用命名空间matlab::engine;//同步启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//计算创建变量matlabPtr->eval(u"[X,Y] = meshgrid(-2:.2:2);");matlabPtr->eval(u"Z = X.*exp(-X.)^2 - y .^2);");//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//为标准输出创建字符串缓冲区类型:std::basic_stringbuf StringBuf;std::shared_ptr output = std::make_shared();//显示MATLAB工作空间中的变量matlabPtr->eval(u"whos", output);//在c++中显示MATLAB输出String output_ = output.get()->str();std::cout << convertUTF16StringToUTF8String(output_) << std::endl; }

重定向错误输出

此示例代码在清除MATLAB工作区中的所有变量后引用一个变量,从而导致MATLAB错误。字符串缓冲区传递给MATLABEngine: eval成员函数捕获try/catch代码块中的错误消息。

#包括“MatlabDataArray.hpp”#包括“MatlabEngine.hpp”#
void errorOutput(){使用命名空间matlab::engine;//同步启动MATLAB引擎std::unique_ptr matlabPtr = startMATLAB();//创建MATLAB数据数组工厂MATLAB::data::ArrayFactory工厂;//为标准输出创建字符串缓冲区类型:std::basic_stringbuf StringBuf;std::shared_ptr error = std::make_shared();matlabPtr->eval(u"clear");try {matlabPtr->eval(u"x + 2;",{},错误);}捕捉(…){字符串error_ = error.get()——> str ();std::cout << convertUTF16StringToUTF8String(error_) << std::endl;}}

另请参阅

|||

相关的话题