IStreamConcatenate
COM公式ドキュメント
複数のデータストリームを 1 つのストリームに結合するために、このインターフェイスを使用します。
解説(Remarks)
スクリプトで MsftStreamConcatenate オブジェクトを作成するには、CreateObject を呼び出す際にプログラム識別子として IMAPI2.MsftStreamConcatenate を指定します。
このインターフェイスを使用する際、次のシナリオは未定義の動作を引き起こすため、避ける必要があります。
- MsftStreamConcatenate オブジェクトを構成する各部分ストリームが、実際には同一のストリームである。
- 連結されたストリームのいずれかが、IMAPI の外部で変更される (読み取り、書き込み、またはシークが行われる)。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
2 つの入力ストリームからこのストリームを初期化します。
| stream1 | IStream* | in | このストリームに追加する 1 番目のストリームの IStream インターフェイスです。 |
| stream2 | IStream* | in | このストリームに追加する 2 番目のストリームの IStream インターフェイスです。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作の失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらだけではありません。
| 戻り値 | 説明 |
|---|---|
|
ポインターが有効ではありません。
値: 0x80004003 |
|
|
必要なメモリの割り当てに失敗しました。
値: 0x8007000E |
|
|
1 つ以上の引数が有効ではありません。
値: 0x80070057 |
解説(Remarks)
IStreamConcatenate インターフェイスを使用する際、次のシナリオは未定義の動作を引き起こすため、避ける必要があります。
- MsftStreamConcatenate オブジェクトを構成する各部分ストリームが、実際には同一のストリームである。
- 連結されたストリームのいずれかが、IMAPI の外部で変更される (読み取り、書き込み、またはシークが行われる)。
入力ストリームの配列からこのストリームを初期化します。
| streams | IStream** | in | このストリームに追加するストリームの IStream インターフェイスの配列です。 |
| streamCount | DWORD | in | streams に含まれるストリームの数です。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作の失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらだけではありません。
| 戻り値 | 説明 |
|---|---|
|
ポインターが有効ではありません。
値: 0x80004003 |
|
|
必要なメモリの割り当てに失敗しました。
値: 0x8007000E |
|
|
このストリームは既に初期化されています。
値: 0x80070057 |
解説(Remarks)
IStreamConcatenate インターフェイスを使用する際、次のシナリオは未定義の動作を引き起こすため、避ける必要があります。
- MsftStreamConcatenate オブジェクトを構成する各部分ストリームが、実際には同一のストリームである。
- 連結されたストリームのいずれかが、IMAPI の外部で変更される (読み取り、書き込み、またはシークが行われる)。
このストリームにストリームを追加します。
| stream | IStream* | in | このストリームに追加するストリームの IStream インターフェイスです。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作の失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらだけではありません。
| 戻り値 | 説明 |
|---|---|
|
実装されていません。
値: 0x80004001 |
解説(Remarks)
このメソッドを呼び出す前に、IStreamConcatenate::Initialize メソッドまたは IStreamConcatenate::Initialize2 メソッドを呼び出す必要があります。
このストリームに複数のストリームを追加するには、IStreamConcatenate::Append2 メソッドを呼び出します。
このストリームにストリームの配列を追加します。
| streams | IStream** | in | このストリームに追加するストリームの IStream インターフェイスの配列です。 |
| streamCount | DWORD | in | streams に含まれるストリームの数です。 |
戻り値
成功した場合は S_OK が返されますが、実装によっては他の成功コードが返されることもあります。次のエラーコードは操作の失敗時に一般的に返されるものですが、返される可能性のあるエラー値はこれらだけではありません。
| 戻り値 | 説明 |
|---|---|
|
実装されていません。
値: 0x80004001 |
解説(Remarks)
このメソッドを呼び出す前に、IStreamConcatenate::Initialize メソッドまたは IStreamConcatenate::Initialize2 メソッドを呼び出す必要があります。
このストリームに単一のストリームを追加するには、IStreamConcatenate::Append メソッドを呼び出します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IStreamConcatenate "{27354146-7F64-5B0F-8F00-5D77AFBE261E}"
#usecom global IStreamConcatenate IID_IStreamConcatenate "{}"
#comfunc global IStreamConcatenate_Initialize 14 sptr,sptr
#comfunc global IStreamConcatenate_Initialize2 15 sptr,int
#comfunc global IStreamConcatenate_Append 16 sptr
#comfunc global IStreamConcatenate_Append2 17 sptr,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。