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


Метод 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

См. также раздел

Интерфейсы уведомлений асинхронной печати

IPrintAsyncNotifyChannel

Вывод на печать