Win32 API 日本語リファレンス
ホームGraphics.Printing › IPrintAsyncNotifyCallback

IPrintAsyncNotifyCallback

COM
IID7def34c1-9d92-4c99-b3b3-db94a9d4191b継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

印刷スプーラーによってホストされるアプリケーションおよびコンポーネントが使用する通信チャネルを作成し、管理します。

解説(Remarks)

アプリケーションが印刷スプーラーでホストされるコンポーネントから通知を受け取るには、通知の登録時に IPrintAsyncNotifyCallback オブジェクトを提供する必要があります。

リッスンしているアプリケーションとの双方向通信チャネルを開く、印刷スプーラーでホストされたコンポーネントは、IPrintAsyncNotifyCallback オブジェクトを提供する必要があります。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT OnEventNotify(IPrintAsyncNotifyChannel* pChannel, IPrintAsyncNotifyDataObject* pData)

指定されたチャネルで通知が利用可能になったことをリスナーに知らせます。このメソッドは印刷システムによって呼び出されます。

pChannelIPrintAsyncNotifyChannel*in送信側とリスナーが使用するチャネルへのポインター。
pDataIPrintAsyncNotifyDataObject*in通知データと、そのサイズおよび種類を格納するオブジェクトへのポインター。

戻り値

HRESULT 重大度 意味
S_OK SUCCESS 関数は正常に完了しました。
INTERNAL_NOTIFICATION_QUEUE_IS_FULL ERROR 印刷スプーラーはこれ以上キューに通知を保持できません。既定では、キューの最大サイズは 10 個の通知です。このエラーが返される場合、リッスンしているアプリケーションが送信される速度に追いつかずに通知を処理しています。この通知は再送信するか、破棄してください。

戻り値は COM エラーコードです。この関数は操作が正常に完了しても S_OK 以外の HRESULT を返す場合があるため、呼び出しの成否を判定するには SUCCEEDED マクロまたは FAILED マクロを使用してください。関数が返した具体的な HRESULT を取得するには、HRESULT_CODE マクロを使用します。

その他の戻り値については PrintAsyncNotifyError を参照してください。

COM エラーコードの詳細については、Error Handling を参照してください。

次のコード例は、これらのマクロを使用して戻り値を評価する方法を示しています。

if (SUCCEEDED(hr)){
  // Call was successful 
}

if (FAILED(hr)) {
  // Call failed 
}

if (FAILED(hr)) {
  // Call failed, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case INTERNAL_NOTIFICATION_QUEUE_IS_FULL:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
} else {
  // Call succeeded 
}

解説(Remarks)

通知を配信するために、印刷スプーラーは、リッスンしているアプリケーションが通知の登録時に提供した IPrintAsyncNotifyCallback オブジェクトの OnEventNotify メソッドを呼び出します。単方向の通知では、pChannelNULL です。双方向チャネルでは、pChannel は、リッスンしているアプリケーションが応答として通知を送信するために使用する IPrintAsyncNotifyChannel を指します。リスナーは、IPrintAsyncNotifyChannelSendNotification メソッドを呼び出すことでこれを行います。

vtbl 4 HRESULT ChannelClosed(IPrintAsyncNotifyChannel* pChannel, IPrintAsyncNotifyDataObject* pData)

通信チャネルの一方のメンバーに対し、チャネルが閉じられることをもう一方のメンバーに通知するよう指示します。

pChannelIPrintAsyncNotifyChannel*in送信側とリスナーが使用するチャネルへのポインター。
pDataIPrintAsyncNotifyDataObject*in通知データまたは応答を格納するオブジェクトへのポインター。

戻り値

HRESULT 重大度 意味
S_OK SUCCESS この関数は正常に完了しました。
CHANNEL_ALREADY_CLOSED ERROR チャネルは既に閉じられています。

戻り値は COM エラーコードです。この関数は操作が正常に完了しても S_OK 以外の HRESULT を返す場合があるため、呼び出しの成否を判定するには SUCCEEDED マクロまたは FAILED マクロを使用してください。関数が返した具体的な HRESULT を取得するには、HRESULT_CODE マクロを使用します。

その他の戻り値については PrintAsyncNotifyError を参照してください。

COM エラーコードの詳細については、Error Handling を参照してください。

次のコード例は、これらのマクロを使用して戻り値を評価する方法を示しています。


if (SUCCEEDED(hr)){
  // Call was successful 
}

if (FAILED(hr)) {
  // Call failed 
}

if (FAILED(hr)) {
  // Call failed, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case CHANNEL_ALREADY_CLOSED:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
} else {
  // Call succeeded 
}

解説(Remarks)

印刷スプーラーによってホストされるコンポーネントが、リッスンしているアプリケーションとの通信チャネルを閉じる場合、そのコンポーネントは、リッスンしているアプリケーションが通知の登録時に提供した IPrintAsyncNotifyCallback オブジェクトの ChannelClosed メソッドを呼び出す必要があります。印刷サーバーがクラッシュした場合、印刷スプーラーは、リッスンしているアプリケーションが提供した IPrintAsyncNotifyCallback オブジェクトの OnEventNotify メソッドの呼び出しを試みます。その際、NOTIFICATION_RELEASE 型の通知が送信されます。

リッスンしているアプリケーションが双方向通信チャネルを閉じる場合、そのアプリケーションは、チャネルの作成時にコンポーネントが提供した IPrintAsyncNotifyCallback オブジェクトの ChannelClosed メソッドを呼び出す必要があります。リッスンしているアプリケーションがクラッシュした場合、印刷スプーラーは、印刷スプーラーによってホストされるコンポーネントが提供した IPrintAsyncNotifyCallback オブジェクトの OnEventNotify メソッドを呼び出します。その際、NOTIFICATION_RELEASE 型の通知が送信されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_IPrintAsyncNotifyCallback "{7DEF34C1-9D92-4C99-B3B3-DB94A9D4191B}"
#usecom global IPrintAsyncNotifyCallback IID_IPrintAsyncNotifyCallback "{}"
#comfunc global IPrintAsyncNotifyCallback_OnEventNotify  3 sptr,sptr
#comfunc global IPrintAsyncNotifyCallback_ChannelClosed  4 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。