エラーと割込みの処理

Wolfram Symbolic Transfer Protocol (WSTP)からのデータの入出力の最中にさまざまな種類のエラーが発生する可能性がある.一度エラーが発生すると,WSTPは非活性な状態となり,呼び出したWSTP関数は即座にすべて0を返す.

int WSError(WSLINK link)エラー番号を返す.エラーが発生していない場合はを返す
char* WSErrorMessage(WSLINK link)エラーの内容を説明する文字列を返す
int WSClearError(WSLINK link)エラーをクリアし,可能であればWSTPを活性な状態に戻す

WSTPプログラム中のエラー処理

複雑な操作を実行する場合は,処理の最後にエラーの発生をチェックするとよいだろう.もしエラーが発生していたら,WSClearError()を呼び出し,WSTPを再度,活性化する必要がある.

int WSNewPacket(WSLINK link)カレントパケットを最後までスキップする

残ったパケットをクリアする

エラーが発生したら,まだ処理していないパケットや式を棄却したいと思うときがある.そのような場合,WSNewPacket()を使う.

また,データ処理中のエラー発生では,処理を後戻りしてそのデータを違った方法で処理したいときもある.データの処理を開始する前にWSCreateMark()を呼んでマークを作成し,データを再処理する必要が出たらWSSeekMark()でマークの位置に戻るようにすれば,再処理が可能になる.ただし,処理が終り次第,WSDestroyMark()を呼び出しておくこと.そうしないと,WSTPによるデータの保存が続いてしまう.

int WSAbortInstallが作成したプログラムに放棄シグナルが送られたときに設定される大域変数

外部プログラムを放棄する

外部関数の実行中にWolfram言語に割込みをかけると,普通,外部関数を放棄するかどうかを聞いてくる.ここで放棄を選択すると,外部プログラム中の大域変数WSAbortに設定される.

WSTPは呼び出された外部関数の途中から自動的に戻ってくることはない.実行に長い時間がかかる関数内では,その都度変数WSAbortをチェックして,変数が設定されていたら直ちに関数から脱出するコードを明示的に書くべきである.