ToolTalk サービスはエラー状態をグローバル変数ではなく、関数の戻り値で返します。ToolTalk 関数は、次のいずれかのエラー値を返します。
Tt_status
int
char* または隠されたハンドル
返される型はそれぞれエラーが発生したかどうかを判定するために、異なる処理をされます。たとえば、tt_default_session_set の戻り値は Tt_status コードです。ToolTalk サービスは、指定された sessid にデフォルトセッションを設定します。
問題がない場合 — 返される Tt_status
コードは TT_OK
問題がある場合 — 返される Tt_status
コードは TT_ERR_SESSION
。この状態コードは、渡した
sessid が有効ではなかったことを通知します。
エラー値の検索には、表 14–1 に示す ToolTalk エラー処理関数を使用できます。
表 14–1 ToolTalk エラー状態の検索
ToolTalk 関数 |
説明 |
---|---|
tt_pointer_error(char * return_val) |
ポインタ内で符号化されたエラーを返す |
tt_pointer_error((void *) (p)) |
VOID * にキャストされたポインタ内で符号化されたエラーを返す |
tt_int_error(int return_val) |
整数内で符号化されたエラーを返す |
これらの関数の返される型は、Tt_status です。
エラー値を確認するには、表 14–2 に示す ToolTalk エラーマクロを使用できます。
表 14–2 ToolTalk エラーマクロ
返される型 |
ToolTalk マクロ |
展開 |
---|---|---|
Tt_status |
tt_is_err(status_code) |
( |
通常の戻り値を持つ関数と持たない関数の戻り値の状態について次に説明します。
ToolTalk 関数がポインタまたは整数などの通常の戻り値を持つ場合は、実際の値の代わりに特別な「エラー値」が返されます。
ToolTalk 関数が通常の戻り値を持たない場合、戻り値は「列挙」型 Tt_status の要素です。
エラーがあるかどうかを確認するには、整数を返す ToolTalk マクロ tt_is_err を使用します。
戻り値が 0 の場合、「列挙」型 Tt_status は TT_OK
か警告のどちらかです。
戻り値が 1 の場合、「列挙」型 Tt_status はエラーです。
エラーがある場合は、例 14–1 に示すように tt_status_message 関数を使用して、Tt_status コードを説明する文字列を取得できます。
char *spec_id, my_application_name; Tt_status tterr; tterr = tt_spec_write(spec_id); if (tt_is_err(tterr)) { fprintf(stderr, “%s: %s\n”, my_application_name, tt_status_message(tterr)); } |
ポインタを返す ToolTalk 関数の実行中にエラーが発生すると、ToolTalk サービスは、正しい Tt_status コードを示す ToolTalk API ライブラリ内のアドレスを与えます。ポインタが有効かどうかを確認するには、ToolTalk マクロの tt_ptr_error を使用できます。ポインタがエラー値の場合は、tt_status_message を使用して Tt_status 文字列を取得できます。
例 14–2 では、エラー値が発見された場合、ポインタを確認し、Tt_status 文字列を検索して出力します。
整数を返す ToolTalk 関数の実行中にエラーが発生すると、戻り値は配信範囲外になります。値が配信範囲内にある場合、tt_int_error 関数は TT_OK
の状態を返します。
値が配信範囲外かどうかを検査するには、tt_is_err マクロを使用して、エラーまたは警告が発生したかどうかを判定できます。
文字列を検索して Tt_status コードを探すには、tt_status_message を使用できます。
例 14–3 では、返された整数を確認しています。
ToolTalk サービスは、ツールが予期せず終了したことをプロセスに知らせる関数を提供します。tt_message_send_on_exit 呼び出しを組み込むとき、次の 2 つのイベントのいずれか 1 つが発生するまで、ToolTalk サービスは内部でメッセージを待ち行列に入れます。
プロセスが tt_close を呼び出す。
この場合 ToolTalk サービスは、その待ち行列からメッセージを削除します。
ttsession サーバーとプロセスとの接続が壊された。たとえば、アプリケーションがクラッシュした場合などです。
この場合 ToolTalk サービスは、待ち行列に入れられたメッセージとパターンを照合し、メッセージを終了前に通常送信するのと同じ方法で配信します。
プロセスは tt_close を呼び出す前に tt_message_send を呼び出すことによって、正常終了のメッセージを送信することもできます。この場合、プロセスがその正常終了メッセージを送信しても、tt_close を呼び出す前にクラッシュすると、ToolTalk サービスは、正常終了メッセージと tt_message_send_on_exit メッセージの両方を対象のプロセスに配信します。
ポインタを受け付ける ToolTalk 関数は、ポインタがエラー値の場合、渡されるポインタを常に確認してから TT_ERR_POINTER
を返します。この確認によって、どの呼び出しに対してもポインタの値を確認しないで、妥当な方法で呼び出しを結合することが可能になります。
例 14–4 では、メッセージが作成され、埋め込まれ、送信されます。tt_message_create が異常終了すると、エラーオブジェクトが「m」に代入され、すべての tt_message_xxx_set 呼び出しと tt_message_send 呼び出しが異常終了します。各呼び出しの間で検査を行わないでエラーを検出するには、tt_message_send からのリターンコードを検査します。