SHCreateMemStream 関数 (shlwapi.h)
CreateStreamOnHGlobal と同様のプロセスを使用してメモリ ストリームを作成します。
構文
IStream * SHCreateMemStream(
[in, optional] const BYTE *pInit,
[in] UINT cbInit
);
パラメーター
[in, optional] pInit
型: const BYTE*
サイズ cbInit のバッファーへのポインター。 このバッファーの内容は、メモリ ストリームの初期コンテンツを設定するために使用されます。 このパラメーターが NULL の場合、返されるメモリ ストリームには初期コンテンツはありません。
[in] cbInit
型: UINT
pInit が指すバッファー内のバイト数。 pInit が NULL に設定されている場合、cbInit は 0 である必要があります。
戻り値
種類: IStream*
成功した場合は、作成されたメモリ ストリームへのポインターを返します。 ストリーム オブジェクトを割り当てられなかった場合は NULL を 返します。
解説
Windows Vista より前のバージョンでは、この関数はパブリック Shlwapi.h ファイルに含まれず、Shlwapi.dll から名前でエクスポートされました。 以前のシステムで使用するには、Shlwapi.dll ファイルから序数 12 として直接呼び出す必要があります。
この関数は、メモリ ストリームを作成します。 これは、その内容をメモリに格納する IStream インターフェイスの実装です。 SHCreateMemStream は 、次の点で CreateStreamOnHGlobal と異なります。
- スレッド セーフ。 SHCreateMemStream によって作成されたストリームは、Windows 8 の時点でスレッド セーフです。 以前のシステムでは、ストリームはスレッド セーフではありません。 CreateStreamOnHGlobal によって作成されたストリームはスレッド セーフです。
- 初期コンテンツ。 SHCreateMemStream は、バッファーの形式で初期コンテンツを受け入れます。 CreateStreamOnHGlobal は、HGLOBAL の形式で初期コンテンツを受け入れます。
- コンテンツへのアクセス。 SHCreateMemStream では、ストリームコンテンツへの直接アクセスは許可されません。 CreateStreamOnHGlobal は、GetHGlobalFromStream を介したアクセスを許可します。
- エラー情報。 SHCreateMemStream が NULL を返した場合、必要なメモリを割り当てることができませんでした。 呼び出し元は、原因がE_OUTOFMEMORYであると想定する必要があります。
- IStream::Clone のサポート。 Windows 8 より前では、 SHCreateMemStream によって作成されたストリームでは 、IStream::Clone はサポートされていません。 CreateStreamOnHGlobal によって作成されたストリームは、 を実行します。 Windows 8 の時点で、 SHCreateMemStream によって作成されたストリームは IStream::Clone をサポートしています。
- SHCreateMemStream によって返されるストリームは、バッファーの末尾を越えて読み取ろうとすると、IStream::Read からS_FALSEを返します。 CreateStreamOnHGlobal によって返されるストリームは、S_OKを返し、バッファーの末尾を越えて読み取ろうとすると *pcbRead を 0 に設定します。
要件
サポートされている最小のクライアント | Windows 2000 Professional、Windows XP [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server、Windows Server 2003 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | shlwapi.h |
Library | Shlwapi.lib |
[DLL] | Shlwapi.dll (バージョン 5.0 以降) |