DBTools 结构中有几个类型为 MSG_CALLBACK 的元素。这些是指向回调函数的指针。
回调函数允许 DBTools 函数将对操作的控制返回到用户的调用应用程序中。DBTools 库使用回调函数来处理因以下四种用途而由 DBTools 函数发送到用户的消息:
确认 当需要由用户确认操作时调用。例如,如果备份目录不存在,则工具库会询问是否需要创建它。
错误消息 在发生错误(如在执行某个操作时磁盘空间不足)时被调用以处理消息。
信息消息 在工具要向用户显示某些消息(如正在卸载的当前表的名称)时调用。
状态信息 针对工具调用以显示操作的状态(如卸载表时的完成百分比)。
您可以将回调例程直接指派给结构。以下语句是使用备份结构的一个示例:
backup_info.errorrtn = (MSG_CALLBACK) MyFunction |
MSG_CALLBACK 在随 SQL Anywhere 提供的 dllapi.h 头文件中定义。工具例程可以使用应当出现在相应用户界面中的消息回调调用应用程序,而无论该用户界面是窗口环境、基于字符的系统上的标准输出还是其它用户界面。
下面这个示例确认例程要求用户对提示回答 [是] 或 [否] 并返回用户的选择:
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 |