重定向MATLAB命令窗口输出到c++
MATLAB®在MATLAB命令窗口中显示错误消息和语句的输出。要将此输出重定向到您的c++程序,请使用字符串缓冲区捕获此输出并将其与函数宏指令,fevalAsync,eval,或evalAsync成员函数。
有关如何设置和构建c++引擎程序的信息,请参见构建c++引擎程序的要求.
重定向屏幕输出
这个示例代码在MATLAB中计算两个语句。这些语句在MATLAB工作空间中创建了三个变量。代码调用MATLAB谁
函数,该函数在MATLAB命令窗口中显示当前工作空间变量。通过将指针传递给调用的缓冲区来捕获字符串缓冲区中的MATLAB标准输出MATLABEngine: eval
.
#包括“MatlabDataArray.hpp”#包括“MatlabEngine.hpp”#
void screenOutput(){使用命名空间matlab::engine;//同步启动MATLAB引擎std::unique_ptrmatlabPtr = 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_ptrmatlabPtr = 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;}}
另请参阅
matlab:引擎::MATLABEngine
|matlab:引擎::startMATLAB
|matlab:: data:: ArrayFactory
|matlab:引擎::convertUTF16StringToUTF8String