4

OS X でMATLABエンジンC インターフェイスを使用しています。engEvalString()

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

また

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

その場合、関数は決して戻りません。これをテストする最も簡単な方法は、engdemo.cの例を使用することです。これは、MATLAB コードの一部を要求して評価します (つまり、何でも入力できます)。

私のアプリケーションでは、ユーザーが任意の MATLAB 入力を入力して評価できるため、不完全な入力から簡単に保護できません。回避策はありますか? この状況でハングしないようにする方法engEvalString()はありますか、または実際に MATLAB に渡す前に任意のコードの正確性/完全性をチェックする方法はありますか?

4

2 に答える 2

1

ご指摘のとおり、このバグは Mac や Linux に固有のもののようです (私の Windows マシンでは再現できませんでした)。eval回避策として、呼び出しを、evalc、またはでラップしますevalin

engEvalString(ep, "eval('x = [1,2')")

さらに、これらの関数の文書化されていない機能は、最初の入力でエラーが発生した場合に評価される 2 番目の入力を取ることです。例えば:

ERR_FLAG = false;
eval('x = [1,2', 'x=nan; ERR_FLAG=true;')

グローバルエラーフラグの値を照会することでエラーをトラップでき、それでも上記のバグを回避できます...

于 2013-02-19T16:08:12.120 に答える
0

これは、OS X の MATLAB エンジン インターフェイスのバグであることがサポートによって確認されています (Windows には存在しません)。回避策として、MATLAB 関数evalevalc、または同様のものを使用できます。コードを に直接渡す代わりに、engEvalString()最初にこれらでラップします。

于 2013-02-17T21:10:18.260 に答える