Поделиться через


Создание процедуры обратного вызова кабинета

Так как 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 — это пустой указатель на переменную контекста или структуру, которая может использоваться подпрограммой обратного вызова для хранения сведений, которые должны сохраняться между последующими вызовами процедуры обратного вызова.

Реализация этого контекста определяется подпрограммой обратного вызова, и на нее никогда не ссылается setupIterateCabinet.

Параметр Notification представляет собой целое число без знака и будет иметь одно из следующих значений.

Уведомление Описание
SPFILENOTIFY_FILEEXTRACTED Файл был извлечен из шкафа.
SPFILENOTIFY_FILEINCABINET В шкафу обнаружен файл.
SPFILENOTIFY_NEEDNEWCABINET Текущий файл продолжается в следующем кабинете.

 

Последние два параметра, Param1 и Param2, также являются целыми числами без знака и содержат дополнительные сведения, относящиеся к уведомлению. Дополнительные сведения об уведомлениях, отправляемых SetupIterateCabinet, см. в разделе Уведомления о файлах кабинета.

Подпрограмма SP_FILE_NOTIFY_CALLBACK возвращает целое число без знака. Подпрограмма обратного вызова cab должна возвращать одно из следующих значений в зависимости от уведомления.

Для 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.