我在OS X上使用MATLAB Engine C接口。我注意到如果给engEvalString()
一个不完整的MATLAB输入,例如
engEvalString(ep, "x=[1 2");
或
engEvalString(ep, "for i=1:10");
然后函数根本不会返回。测试这个的最快方法是使用engdemo.c示例,该示例将提示输入一段MATLAB代码并对其进行评估(即您可以键入任何内容)。
我的应用程序允许用户输入任意MATLAB输入并对其进行评估,因此我无法轻松防止不完整的输入。有解决方法吗?有没有办法阻止engEvalString()
在这种情况下挂起,或者有没有办法在我将代码传递给MATLAB之前检查任意代码片段的正确性/完整性?
答案 0 :(得分:1)
正如您所指出的,似乎这个错误特定于Mac和/或Linux(我无法在我的Windows机器上重现它)。作为一种解决方法,将调用包含在eval
,evalc
或evalin
中:
engEvalString(ep, "eval('x = [1,2')")
此外,这些函数的未记录的特征是它们采用第二个输入,在第一个输入中发生错误时进行评估。例如:
ERR_FLAG = false;
eval('x = [1,2', 'x=nan; ERR_FLAG=true;')
您可以通过查询全局错误标志的值来捕获错误,并且仍然可以避免上面的错误......
答案 1 :(得分:0)
OS X上的MATLAB Engine界面中的错误证实了这一点(Windows中没有这个错误)。通过使用MATLAB函数eval
,evalc
或类似函数,可以实现变通方法。而不是直接将代码传递给engEvalString()
,而是将它包装在第一个代码中。