次の方法で共有


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 が指すバッファー内のバイト数。 pInitNULL に設定されている場合、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 を介したアクセスを許可します。
  • エラー情報。 SHCreateMemStreamNULL を返した場合、必要なメモリを割り当てることができませんでした。 呼び出し元は、原因が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 以降)