Метод IPrintAsyncNotifyChannel::SendNotification (prnasnot.h)
Отправляет уведомление от компонента, размещенного в очереди печати печати, в одно или несколько прослушивающих приложений, или отправляет ответ от приложения обратно компоненту.
Синтаксис
HRESULT SendNotification(
[in] IPrintAsyncNotifyDataObject *pData
);
Параметры
[in] pData
Указатель на содержимое уведомления, его размер и тип.
Возвращаемое значение
HRESULT | Severity | Значение |
---|---|---|
S_OK | УСПЕШНОЕ ЗАВЕРШЕНИЕ | Функция успешно завершена. |
ASYNC_CALL_ALREADY_PARKED | ОШИБКА | Невозможно отправить уведомление, так как получатель не использовал предыдущее уведомление. |
ASYNC_CALL_IN_PROGRESS | ОШИБКА | Канал занят другим уведомлением или ответом. |
ASYNC_NOTIFICATION_FAILURE | ОШИБКА | Ни один из прослушивателей в этом канале не настроен для получения уведомлений этого типа, или возникла проблема с выделением ресурсов, необходимых для выполнения этого вызова. |
CHANNEL_ACQUIRED | ОШИБКА | Другой прослушиватель приобрел этот канал. Уведомление не было отправлено. Исходный прослушиватель больше не будет получать уведомления. |
CHANNEL_ALREADY_CLOSED | ОШИБКА | Не удалось отправить уведомление, так как канал был закрыт до этого вызова. |
CHANNEL_NOT_OPENED | ОШИБКА | Не удалось отправить уведомление, так как канал не был открыт до этого вызова. |
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION | ОШИБКА | Уведомление не может быть отправлено, так как ответ на последнее уведомление не получен. |
INVALID_NOTIFICATION_TYPE | ОШИБКА | Указанный тип уведомления недопустим. |
MAX_NOTIFICATION_SIZE_EXCEEDED | ОШИБКА | Превышен максимальный размер данных уведомления. По умолчанию максимальный размер данных составляет 10 мегабайт. |
NO_LISTENERS | УСПЕШНОЕ ЗАВЕРШЕНИЕ | Указывает, что зарегистрированных прослушивающих приложений нет. |
UNIRECTIONAL_NOTIFICATION_LOST | УСПЕШНОЕ ЗАВЕРШЕНИЕ | Один или несколько прослушивателей не получили это уведомление, но по крайней мере один прослушиватель получил это уведомление. |
Возвращаемые значения — это коды ошибок COM. Так как эта функция может успешно завершить операцию, но вернуть HRESULT, отличный от S_OK для определения успешности вызова следует использовать макрос SUCCEEDED или FAILED. Чтобы получить конкретный HRESULT, возвращенный функцией, используйте макрос HRESULT_CODE. В следующем примере кода показано, как можно использовать эти макросы.
Другие возможные возвращаемые значения см. в разделе PrintAsyncNotifyError .
Дополнительные сведения о кодах ошибок COM см. в разделе Обработка ошибок.
if (SUCCEEDED(hr)) {
// Call succeeded, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case S_OK:
// Some action
break;
case NO_LISTENERS:
// Some action
break;
case UNIRECTIONAL_NOTIFICATION_LOST:
// Some action
break;
default:
// Default action
break;
}
} else {
// Call failed, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case ASYNC_NOTIFICATION_FAILURE:
// Some action
break;
case CHANNEL_ALREADY_CLOSED:
// Some action
break;
case CHANNEL_NOT_OPENED:
// Some action
break;
//
// ... Test for other error cases
//
default:
// Default action
break;
}
}
Комментарии
Если в однонаправленном канале выполняется вызов SendNotification , когда очередь печати печати обрабатывает более ранний вызов SendNotification , очередь очереди очереди печати печати помещает в очередь ожидающее уведомление. Уведомления, помещенные в очередь, удаляются, если компонент, размещенный в очереди печати, или приложение вызывает IPrintAsyncNotifyChannel::CloseChannel.
Если для двунаправленного канала выполняется вызов SendNotification , когда Print-Spooler обрабатывает более ранний вызов SendNotification , то ожидающий вызов завершится ошибкой. В этом случае, если вызывающий объект является отправителем в очереди печати печати, SendNotification возвращает CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Если вызывающий объект является прослушивателем, отправляющий ответ, SendNotification возвращает ASYNC_CALL_IN_PROGRESS.
Если для одного двунаправленного канала существует несколько прослушивателей, начальное уведомление, отправленное в канале, будет доставлено всем прослушивателям. Первый прослушиватель, который ответит, получит канал. Прослушиватели, вызывающие SendNotification после получения канала, завершаются ошибкой CHANNEL_ACQUIRED.
Прослушиватель, получающий начальное уведомление о двунаправленном канале, может быть не заинтересован в получении канала. В этом случае прослушиватель может вызывать метод IUnknown::Release . Метод IUnknown::Release не требуется вызывать при вызове методов SendNotification или IPrintAsyncNotifyChannel::CloseChannel .
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | prnasnot.h |
DLL | Prnasnot.dll |