主要内容

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

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

有关如何安装和生成C++引擎程序的信息,请参见构建c++引擎程序

屏幕输出重定向

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

#include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .hpp" #include " dataarray .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输出= 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代码块中的错误消息。

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

另请参阅

|||

相关的话题