IWSDOutboundAttachment
COM公式ドキュメント
MIME コンテナーを使用して、アプリケーションがメッセージ内で添付データを送信できるようにします。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
MIME コンテナーを使用して、リモートホストに添付データを送信します。
| pBuffer | BYTE* | in | 出力データを格納するバッファーへのポインター。このデータバッファーの割り当てと解放は、アプリケーションプログラムが行います。 |
| dwBytesToWrite | DWORD | in | pBuffer からリモートホストへ送信するバイト数。 |
| pdwNumberOfBytesWritten | DWORD* | out | リモートホストへ実際に送信されたデータのバイト数を格納する DWORD へのポインター。 |
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| pdwNumberofBytesWritten が NULL です。 | |
| pBuffer が NULL です。 | |
|
送信添付インターフェイスが初期化されていません。WSDCreateOutboundAttachment を呼び出してインターフェイスを初期化してください。 |
| 内部バッファーが利用できませんでした。データは受け付けられず、送信用にキューイングされませんでした。 |
解説(Remarks)
Write メソッドを使用すると、アプリケーションプログラムは任意のデータを MIME でカプセル化されたメッセージの添付としてリモートホストへ送信できます。最初の Write の呼び出しにより送信添付ストリームが開かれ、HTTP ヘッダー、エンベロープデータ、および MIME エンコードされたアプリケーションデータの送信が開始されます。以降の Write の呼び出しでは、アプリケーションが Close を呼び出すまで、MIME エンコードされたアプリケーションデータのブロックが追加送信されます。Close を呼び出すと添付ストリームが閉じられ、メッセージのエンベロープデータとヘッダーの送信が完了します。
Write 操作は、いくつかの条件下でブロックすることがあります。最初の操作では、HTTP ヘッダーと XML コンテンツが送信されるまで Write はブロックします。単一のメッセージで複数の添付を送信する場合、いずれかの添付に対する最初の Write の呼び出しは、先行する添付ストリームの送信がすべて完了するまでブロックすることがあります。 リモートホストが応答しない場合、Write は最大 30 秒間(HTTP の送信タイムアウトに従って)ブロックすることがあります。
接続の確立中またはヘッダーの送信中にエラーが発生した場合、Write は直ちにエラーコードを返します。データ転送エラーが発生した場合、そのエラーは以降の Write または Close の呼び出しまで遅延して報告されることがあります。
STG_S_BLOCK を返して失敗した Write の試行の後でも、Write メソッドが正常に完了することがあります。その後の成功は、最初の失敗した試行の後に内部バッファーが解放され、使用可能になったことを示します。アプリケーションが STG_S_BLOCK を受け取った場合、アプリケーションは Write メソッドを使用して同じデータを再送するか、Abort メソッドを使用してデータ転送を終了できます。
現在の添付 MIME データストリームを閉じます。(IWSDOutboundAttachment.Close)
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。添付ストリーム内のすべてのデータが正常に転送されました。 | |
|
Write を呼び出す前に Close が呼び出されました。添付ストリームを閉じる前に Write を呼び出す必要があります。 |
| 内部バッファーが利用できませんでした。添付ストリーム内のデータは正常に転送されませんでした。 |
解説(Remarks)
Close は、現在の添付ストリームで送信するデータがこれ以上ないことをアプリケーションが示すために使用します。戻り値は、直前の Write 操作でのエラー、または接続を閉じる際の問題を示すことがあります。
Close は、直前の Write 操作の完了を待機する間、ブロックすることがあります。 Close は、直前の Write 操作の完了を待機する間、最大 30 秒間(HTTP の送信タイムアウトに従って)ブロックすることがあります。
STG_S_BLOCK を返して失敗した Close の試行の後でも、Close メソッドが正常に完了することがあります。その後の成功は、最初の失敗した試行の後に内部バッファーが解放され、使用可能になったことを示します。アプリケーションが STG_S_BLOCK を受け取った場合、アプリケーションは再度 Close を呼び出すか、Abort メソッドを使用してデータ転送を終了できます。
添付 MIME データストリームでのデータ転送を中止します。
戻り値
戻り値には次のものが含まれますが、これらに限定されません。
| 戻り値 | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
|
Write を呼び出す前に Abort が呼び出されました。添付ストリームを終了する前に Write を呼び出す必要があります。 |
解説(Remarks)
Abort メソッドは、Close または Write メソッドの呼び出しがエラー STG_S_BLOCK で失敗した場合に呼び出すことができます。
添付ストリームに対して Abort を呼び出した後は、Close を呼び出してはなりません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWSDOutboundAttachment "{AA302F8D-5A22-4BA5-B392-AA8486F4C15D}" #usecom global IWSDOutboundAttachment IID_IWSDOutboundAttachment "{}" #comfunc global IWSDOutboundAttachment_Write 3 var,int,var #comfunc global IWSDOutboundAttachment_Close 4 #comfunc global IWSDOutboundAttachment_Abort 5 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IWSDOutboundAttachment "{AA302F8D-5A22-4BA5-B392-AA8486F4C15D}" #usecom global IWSDOutboundAttachment IID_IWSDOutboundAttachment "{}" #comfunc global IWSDOutboundAttachment_Write 3 sptr,int,sptr #comfunc global IWSDOutboundAttachment_Close 4 #comfunc global IWSDOutboundAttachment_Abort 5 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。