Win32 API 日本語リファレンス
ホームDevices.WebServicesOnDevices › IWSDOutboundAttachment

IWSDOutboundAttachment

COM
IIDaa302f8d-5a22-4ba5-b392-aa8486f4c15d継承元IWSDAttachment自前メソッド開始 vtbl3

公式ドキュメント

MIME コンテナーを使用して、アプリケーションがメッセージ内で添付データを送信できるようにします。

メソッド 3

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

vtbl 3 HRESULT Write(BYTE* pBuffer, DWORD dwBytesToWrite, DWORD* pdwNumberOfBytesWritten)

MIME コンテナーを使用して、リモートホストに添付データを送信します。

pBufferBYTE*in出力データを格納するバッファーへのポインター。このデータバッファーの割り当てと解放は、アプリケーションプログラムが行います。
dwBytesToWriteDWORDinpBuffer からリモートホストへ送信するバイト数。
pdwNumberOfBytesWrittenDWORD*outリモートホストへ実際に送信されたデータのバイト数を格納する DWORD へのポインター。

戻り値

戻り値には次のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは正常に完了しました。
E_POINTER
pdwNumberofBytesWrittenNULL です。
E_INVALIDARG
pBufferNULL です。
HRESULT_FROM_WIN32(ERROR_INVALID_OPERATION)
送信添付インターフェイスが初期化されていません。WSDCreateOutboundAttachment を呼び出してインターフェイスを初期化してください。
STG_S_BLOCK
内部バッファーが利用できませんでした。データは受け付けられず、送信用にキューイングされませんでした。

解説(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 メソッドを使用してデータ転送を終了できます。

vtbl 4 HRESULT Close()

現在の添付 MIME データストリームを閉じます。(IWSDOutboundAttachment.Close)

戻り値

戻り値には次のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは正常に完了しました。添付ストリーム内のすべてのデータが正常に転送されました。
HRESULT_FROM_WIN32(ERROR_INVALID_OPERATION)

Write を呼び出す前に Close が呼び出されました。添付ストリームを閉じる前に Write を呼び出す必要があります。

STG_S_BLOCK
内部バッファーが利用できませんでした。添付ストリーム内のデータは正常に転送されませんでした。

解説(Remarks)

Close は、現在の添付ストリームで送信するデータがこれ以上ないことをアプリケーションが示すために使用します。戻り値は、直前の Write 操作でのエラー、または接続を閉じる際の問題を示すことがあります。

Close は、直前の Write 操作の完了を待機する間、ブロックすることがあります。 Close は、直前の Write 操作の完了を待機する間、最大 30 秒間(HTTP の送信タイムアウトに従って)ブロックすることがあります。

STG_S_BLOCK を返して失敗した Close の試行の後でも、Close メソッドが正常に完了することがあります。その後の成功は、最初の失敗した試行の後に内部バッファーが解放され、使用可能になったことを示します。アプリケーションが STG_S_BLOCK を受け取った場合、アプリケーションは再度 Close を呼び出すか、Abort メソッドを使用してデータ転送を終了できます。

vtbl 5 HRESULT Abort()

添付 MIME データストリームでのデータ転送を中止します。

戻り値

戻り値には次のものが含まれますが、これらに限定されません。

戻り値 説明
S_OK
メソッドは正常に完了しました。
HRESULT_FROM_WIN32(ERROR_INVALID_OPERATION)

Write を呼び出す前に Abort が呼び出されました。添付ストリームを終了する前に Write を呼び出す必要があります。

解説(Remarks)

Abort メソッドは、Close または Write メソッドの呼び出しがエラー STG_S_BLOCK で失敗した場合に呼び出すことができます。

添付ストリームに対して Abort を呼び出した後は、Close を呼び出してはなりません。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。