IPrintAsyncNotifyDataObject
COM公式ドキュメント
通知チャネルで送信されるデータをカプセル化します。
解説(Remarks)
リッスンしているアプリケーションは、AcquireData で取得した通知データの利用を終えたら、ReleaseData を呼び出す必要があります。
IPrintAsyncNotifyDataObject インターフェイスは、リッスンしているアプリケーションがオブジェクトのデータの利用を終えていない場合に IUnknown::Release の呼び出しによってオブジェクトが解放されないように実装する必要があります。したがって、アプリケーションが AcquireData を呼び出したものの、まだ ReleaseData を呼び出していない状態で Release が呼び出された場合、オブジェクトを解放してはなりません。このため、AcquireData では IUnknown::AddRef を使用してオブジェクトの参照カウントをインクリメントし、ReleaseData でカウントをデクリメントすることを推奨します。
リッスンしているアプリケーションは、印刷スプーラーのプロセス内にも、その外部にも存在できます。リスナーがこのプロセスの外部にある場合、アクセスできるのは IPrintAsyncNotifyDataObject のメソッドのみです。そのため、IPrintAsyncNotifyDataObject が独自のインターフェイスも実装している場合、そのインターフェイスのメソッドは印刷スプーラーのプロセス内にあるリッスン アプリケーションからのみ利用できる点に注意してください。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
リッスンしているアプリケーションに、通知データ (データのサイズと種類を含む) を指し示します。
| ppNotificationData | BYTE** | outoptional | 通知データを格納するバッファー。 |
| pSize | DWORD* | outoptional | データ バッファーのサイズ。 |
| ppSchema | GUID** | outoptional | データ スキーマへの GUID ポインター。 |
戻り値
指定可能な値については、PrintAsyncNotifyError を参照してください。
COM エラー コードの詳細については、Error Handling を参照してください。
解説(Remarks)
このメソッドを呼び出したアプリケーションは、通知データの利用を終えたら ReleaseData を呼び出す必要があります。
IPrintAsyncNotifyDataObject インターフェイスは、リッスンしているアプリケーションがオブジェクトのデータの利用を終えていない場合に IUnknown::Release の呼び出しによってオブジェクトが解放されないように実装する必要があります。したがって、アプリケーションが AcquireData を呼び出したものの、まだ ReleaseData を呼び出していない状態で Release が呼び出された場合、オブジェクトを解放してはなりません。このため、AcquireData では IUnknown::AddRef を使用してオブジェクトの参照カウントをインクリメントし、ReleaseData でカウントをデクリメントすることを推奨します。
印刷スプーラーが失敗すると、IPrintAsyncNotifyDataObject オブジェクトが作成されます。リスナーがこの通知に対して AcquireData を呼び出すと、ppNotificationData は NULL、サイズは 0、ppSchema は NOTIFICATION_RELEASE になります。
IPrintAsyncNotifyDataObject にカプセル化されたデータが使用しているメモリを解放します。
戻り値
指定可能な値については、PrintAsyncNotifyError を参照してください。
COM エラー コードの詳細については、Error Handling を参照してください。
解説(Remarks)
リッスンしているアプリケーションは、通知データの利用を終えたらこのメソッドを呼び出す必要があります。
IPrintAsyncNotifyDataObject インターフェイスは、リッスンしているアプリケーションがオブジェクトのデータの利用を終えていない場合に IUnknown::Release の呼び出しによってオブジェクトが解放されないように実装する必要があります。したがって、アプリケーションが AcquireData を呼び出したものの、まだ ReleaseData を呼び出していない状態で Release が呼び出された場合、オブジェクトを解放してはなりません。このため、AcquireData では IUnknown::AddRef を使用してオブジェクトの参照カウントをインクリメントし、ReleaseData でカウントをデクリメントすることを推奨します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IPrintAsyncNotifyDataObject "{77CF513E-5D49-4789-9F30-D0822B335C0D}" #usecom global IPrintAsyncNotifyDataObject IID_IPrintAsyncNotifyDataObject "{}" #comfunc global IPrintAsyncNotifyDataObject_AcquireData 3 var,var,var #comfunc global IPrintAsyncNotifyDataObject_ReleaseData 4 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IPrintAsyncNotifyDataObject "{77CF513E-5D49-4789-9F30-D0822B335C0D}" #usecom global IPrintAsyncNotifyDataObject IID_IPrintAsyncNotifyDataObject "{}" #comfunc global IPrintAsyncNotifyDataObject_AcquireData 3 sptr,sptr,sptr #comfunc global IPrintAsyncNotifyDataObject_ReleaseData 4 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。