次の方法で共有


IPrintAsyncNotifyChannel::SendNotification メソッド (prnasnot.h)

印刷スプーラーによってホストされているコンポーネントから 1 つ以上のリッスン しているアプリケーションに通知を送信するか、アプリケーションからコンポーネントに応答を送信します。

構文

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

パラメーター

[in] pData

通知の内容とそのサイズと種類へのポインター。

戻り値

HRESULT 重大度 説明
S_OK SUCCESS 関数は正常に終了しました。
ASYNC_CALL_ALREADY_PARKED ERROR 受信者が前の通知を使用していないため、通知を送信できません。
ASYNC_CALL_IN_PROGRESS ERROR チャネルは、別の通知または応答でビジー状態になっています。
ASYNC_NOTIFICATION_FAILURE ERROR このチャネルのどのリスナーも、この通知の種類を受信するように構成されていないか、この呼び出しを完了するために必要なリソースの割り当てに問題が発生しました。
CHANNEL_ACQUIRED ERROR 別のリスナーがこのチャネルを取得しました。 通知が送信されませんでした。 元のリスナーは通知を受け取らなくなります。
CHANNEL_ALREADY_CLOSED ERROR この呼び出しの前にチャネルが閉じられたため、通知を送信できませんでした。
CHANNEL_NOT_OPENED ERROR この呼び出しの前にチャネルが開かなかったため、通知を送信できませんでした。
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION ERROR 最後の通知への応答が受信されていないため、通知を送信できません。
INVALID_NOTIFICATION_TYPE ERROR 指定された通知の種類が無効です。
MAX_NOTIFICATION_SIZE_EXCEEDED ERROR 通知データの最大サイズを超えました。 既定では、使用できる最大データ サイズは 10 メガバイトです。
NO_LISTENERS SUCCESS 登録済みのリッスン アプリケーションがないことを示します。
UNIRECTIONAL_NOTIFICATION_LOST SUCCESS 1 つ以上のリスナーがこの通知を受信しませんでしたが、少なくとも 1 つのリスナーがこの通知を受信しました。
 

戻り値は 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

印刷