Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » SQL Anywhere 数据库工具接口 » 数据库工具接口 » 使用数据库工具接口

 

使用回调函数

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 );
}