キャビネット コールバック ルーチンの作成

セットアップ API では既定のキャビネット コールバック ルーチンが提供されないため、ルーチンを指定する必要があります。 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 パラメーターは符号なし整数であり、次のいずれかの値になります。

Notification Description
SPFILENOTIFY_FILEEXTRACTED ファイルがキャビネットから抽出されました。
SPFILENOTIFY_FILEINCABINET キャビネットでファイルが見つかりました。
SPFILENOTIFY_NEEDNEWCABINET 現在のファイルは次のキャビネットで続きます。

 

最後の 2 つのパラメーター Param1Param2 も符号なし整数であり、通知に関連する追加情報が含まれています。 SetupIterateCabinet によって送信される通知の詳細については、「キャビネット ファイル通知」を参照してください。

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」を参照してください。