IPrintAsyncNotifyChannel::SendNotification 메서드(prnasnot.h)

인쇄 스풀러가 호스트하는 구성 요소에서 하나 이상의 수신 대기 애플리케이션으로 알림을 보내거나 애플리케이션의 응답을 구성 요소로 다시 보냅니다.

구문

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

매개 변수

[in] pData

알림 내용과 해당 크기와 형식에 대한 포인터입니다.

반환 값

HRESULT 심각도 의미
S_OK SUCCESS 함수가 성공적으로 완료되었습니다.
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 오류 알림 데이터의 최대 크기를 초과했습니다. 기본적으로 허용되는 최대 데이터 크기는 10MB입니다.
NO_LISTENERS SUCCESS 등록된 수신 대기 애플리케이션이 없음을 나타냅니다.
UNIRECTIONAL_NOTIFICATION_LOST SUCCESS 하나 이상의 수신기가 이 알림을 받지 못했지만 하나 이상의 수신기가 이 알림을 수신했습니다.
 

반환 값은 COM 오류 코드입니다. 이 함수는 작업을 성공적으로 완료할 수 있지만 S_OK 이외의 HRESULT를 반환할 수 있으므로 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을 호출하면 대기 중인 알림이 삭제됩니다.

양방향 채널의 경우 Print-Spooler 이전 SendNotification 호출을 처리하는 동안 SendNotification 호출이 수행되면 보류 중인 호출이 실패합니다. 이 경우 호출자가 인쇄 스풀러 내의 발신자인 경우 SendNotification 은 CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION 반환합니다. 호출자가 회신을 보내는 수신기인 경우 SendNotification 은 ASYNC_CALL_IN_PROGRESS 반환합니다.

동일한 양방향 채널에 대해 여러 수신기가 있는 경우 채널에서 전송된 초기 알림이 모든 수신기에 전달됩니다. 회신할 첫 번째 수신기는 채널을 획득합니다. 채널을 가져온 후 SendNotification 을 호출하는 수신기는 오류 CHANNEL_ACQUIRED 실패합니다.

양방향 채널에서 초기 알림을 받는 수신기는 채널 획득에 관심이 없을 수 있습니다. 이 경우 수신기는 IUnknown::Release 메서드를 호출할 수 있습니다. SendNotification 또는 IPrintAsyncNotifyChannel::CloseChannel 메서드를 호출하는 경우 IUnknown::Release 메서드를 호출할 필요가 없습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 prnasnot.h
DLL Prnasnot.dll

추가 정보

비동기 인쇄 알림 인터페이스

IPrintAsyncNotifyChannel

인쇄