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 |