创建 Cabinet 回调例程

由于安装 API 不提供默认的 Cabinet 回调例程,因此需要提供例程。 SetupIterateCabinet 函数需要的回调例程必须具有与 FileCallback 指向的回调例程相同的形式。

以下是 SetupIterateCabinet 用于向回调例程发送通知的语法。

MsgHandler(          //the specified callback routine
    Context,         //context used by the callback routine
    Notification,    //cabinet notification
    Param1,          //additional notification information
    Param2           //additional notification information
);

Context 参数是指向上下文变量或结构的 void 指针,回调例程可以使用该指针来存储需要在对回调例程的后续调用之间保留的信息。

此上下文的实现由回调例程指定, 并且 SetupIterateCabinet 永远不会引用或更改它。

Notification 参数是一个无符号整数,将是以下值之一。

通知 说明
SPFILENOTIFY_FILEEXTRACTED 文件已从文件柜中提取。
SPFILENOTIFY_FILEINCABINET 在文件柜中遇到文件。
SPFILENOTIFY_NEEDNEWCABINET 当前文件在下一个文件柜中继续。

 

最后两个参数 Param1Param2 也是无符号整数,包含与通知相关的其他信息。 有关 SetupIterateCabinet 发送的通知的详细信息,请参阅 Cabinet 文件通知

SP_FILE_NOTIFY_CALLBACK例程返回无符号整数。 根据通知,内阁回调例程应返回以下值之一。

对于SPFILENOTIFY_FILEINCABINET通知, SetupIterateCabinet 要求回调例程返回以下值之一。

含义
FILEOP_ABORT 中止内阁处理。
FILEOP_DOIT 提取当前文件。
FILEOP_SKIP 跳过当前文件。

 

对于SPFILENOTIFY_NEEDNEWCABINET和SPFILENOTIFY_FILEEXTRACTED通知, SetupIterateCabinet 要求回调例程返回以下值之一。

含义
NO_ERROR 未遇到任何错误,请继续处理该文件柜。
ERROR_XXX 发生指定类型的错误。 SetupIterateCabinet 函数将返回 FALSE,指定的错误代码将通过调用 GetLastError 返回。

 

如果回调例程返回FILEOP_DOIT,则例程还必须提供完整的目标路径。 有关详细信息,请参阅 SPFILENOTIFY_FILEINCABINET