Создание процедуры обратного вызова кабинета
Так как 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.