MATLAB引擎:如果给定不完整的输入,engEvalString()将不会返回

时间:2013-01-27 17:10:40

标签: matlab matlab-deployment matlab-engine

我在OS X上使用MATLAB Engine C接口。我注意到如果给engEvalString()一个不完整的MATLAB输入,例如

engEvalString(ep, "x=[1 2");

engEvalString(ep, "for i=1:10");

然后函数根本不会返回。测试这个的最快方法是使用engdemo.c示例,该示例将提示输入一段MATLAB代码并对其进行评估(即您可以键入任何内容)。

我的应用程序允许用户输入任意MATLAB输入并对其进行评估,因此我无法轻松防止不完整的输入。有解决方法吗?有没有办法阻止engEvalString()在这种情况下挂起,或者有没有办法在我将代码传递给MATLAB之前检查任意代码片段的正确性/完整性?

2 个答案:

答案 0 :(得分:1)

正如您所指出的,似乎这个错误特定于Mac和/或Linux(我无法在我的Windows机器上重现它)。作为一种解决方法,将调用包含在evalevalcevalin中:

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函数evalevalc或类似函数,可以实现变通方法。而不是直接将代码传递给engEvalString(),而是将它包装在第一个代码中。