エラーと割込みの処理
MathLink からのデータの入出力の最中にさまざまな種類のエラーが発生する可能性がある.一度エラーが発生すると,MathLink は非活性な状態となり,呼び出した関数は即座にすべて0を返す.
| intMLError(MLINK link) | エラー番号を返す.エラーが発生していない場合は |
| char*MLErrorMessage(MLINK link) | エラーの内容を説明する文字列を返す |
| int MLClearError(MLINK link) | エラーをクリアし,可能であれば MathLink を活性な状態に戻す |
複雑な操作を実行する場合は,処理の最後にエラーの発生をチェックするとよいだろう.もしエラーが発生していたら,MLClearError()を呼び出し,MathLink を再度,活性化する必要がある.
| int MLNewPacket(MLINK link) | カレントパケットを最後までスキップする |
エラーが発生したら,まだ処理していないパケットや式を棄却したいと思うときがある.そのような場合,MLNewPacket()を使う.
また,データ処理中のエラー発生では,処理を後戻りしてそのデータを違った方法で処理したいときもある.データの処理を開始する前にMLCreateMark()を呼んでマークを作成し,データを再処理する必要が出たらMLSeekMark()でマークの位置に戻るようにすれば,再処理が可能になる.ただし,処理が終り次第,MLDestroyMark()を呼び出しておくこと.そうしないと,MathLink によるデータの保存が続いてしまう.
外部関数の実行中に Mathematica に割込みをかけると,普通,外部関数を放棄するかどうかを聞いてくる.ここで放棄を選択すると,外部プログラム中の大域変数MLAbortが
に設定される.
MathLink は呼び出された外部関数の途中から自動的に戻ってくることはない.実行に長い時間がかかる関数内では,その都度変数MLAbortをチェックして,変数が設定されていたら直ちに関数から脱出するコードを明示的に書くべきである.
