DBTools 構造体には MSG_CALLBACK 型の要素がいくつかあります。それらはコールバック関数へのポインタです。
コールバック関数を使用すると、DBTools 関数はオペレーションの制御をユーザの呼び出し側アプリケーションに戻すことができます。DBTools ライブラリはコールバック関数を使用して、DBTools 関数から、次の 4 つの目的を持ってユーザに送られたメッセージを処理します。
確認 ユーザがアクションを確認する必要がある場合に呼び出されます。たとえば、バックアップ・ディレクトリが存在しない場合、ツール・ライブラリはディレクトリを作成する必要があるか確認を求めます。
エラー・メッセージ オペレーション中にディスク領域が足りなくなった場合など、エラーが発生したときにメッセージを処理するために呼び出されます。
情報メッセージ ツールがユーザにメッセージを表示するときに呼び出されます (アンロード中の現在のテーブル名など)。
ステータス情報 ツールがオペレーションのステータス (テーブルのアンロード処理の進捗率など) を表示するときに呼び出されます。
コールバック・ルーチンを構造体に直接割り当てることができます。次の文は、バックアップ構造体を使用した例です。
backup_info.errorrtn = (MSG_CALLBACK) MyFunction |
MSG_CALLBACK は、SQL Anywhere に付属する dllapi.h ヘッダ・ファイルに定義されています。ツール・ルーチンは、呼び出し側アプリケーションにメッセージを付けてコールバックできます。このメッセージは、ウィンドウ環境でも、文字ベースのシステムの標準出力でも、またはそれ以外のユーザ・インタフェースであっても、適切なユーザ・インタフェースに表示されます。
次の確認ルーチンの例では、YES または NO をプロンプトに答えるようユーザに求め、ユーザの選択結果を戻します。
extern short _callback ConfirmRtn( char * question ) { int ret = IDNO; if( question != NULL ) { ret = MessageBox( HwndParent, question, "Confirm", MB_ICONEXCLAMATION|MB_YESNO ); } return( ret == IDYES ); } |
次はエラー・メッセージ処理ルーチンの例です。エラー・メッセージをウィンドウに表示します。
extern short _callback ErrorRtn( char * errorstr ) { if( errorstr != NULL ) { MessageBox( HwndParent, errorstr, "Backup Error", MB_ICONSTOP|MB_OK ); } return( 0 ); } |
メッセージ・コールバック関数の一般的な実装では、メッセージを画面に表示します。
extern short _callback MessageRtn( char * messagestr ) { if( messagestr != NULL ) { OutputMessageToWindow( messagestr ); } return( 0 ); } |
ステータス・コールバック・ルーチンは、ツールがオペレーションのステータス (テーブルのアンロード処理の進捗率など) を表示する必要がある場合に呼び出されます。一般的な実装では、メッセージを画面に表示するだけです。
extern short _callback StatusRtn( char * statusstr ) { if( statusstr != NULL ) { OutputMessageToWindow( statusstr ); return( 0 ); } |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |