次の方法で共有


StgCreateDocfileOnILockBytes 関数 (coml2api.h)

StgCreateDocfileOnILockBytes 関数は、呼び出し元によって提供されるバイト配列オブジェクトの上に新しい複合ファイル ストレージ オブジェクトを作成して開きます。 ストレージ オブジェクトは、 IStorage インターフェイスの COM 提供の複合ファイル実装をサポートします。

構文

HRESULT StgCreateDocfileOnILockBytes(
  [in]  ILockBytes *plkbyt,
  [in]  DWORD      grfMode,
  [in]  DWORD      reserved,
  [out] IStorage   **ppstgOpen
);

パラメーター

[in] plkbyt

複合ファイルを作成する基になるバイト配列オブジェクトの ILockBytes インターフェイスへのポインター。

[in] grfMode

新しい複合ファイルを開くときに使用するアクセス モードを指定します。 詳細については、 STGM 定数 と以下の「解説」セクションを参照してください。

[in] reserved

今後使用するために予約されています。0 にする必要があります。

[out] ppstgOpen

新しいストレージ オブジェクト上の IStorage ポインターの場所へのポインター。

戻り値

StgCreateDocfileOnILockBytes 関数は、ファイル システム エラー、または HRESULT でラップされたシステム エラー、または ILockBytes インターフェイス エラーの戻り値を返すこともできます。 詳細については、「 エラー処理戦略 」および「 不明なエラーの処理」を参照してください。

注釈

StgCreateDocfileOnILockBytes 関数は、IStorage インターフェイスの COM 提供の複合ファイル実装を使用して、バイト配列オブジェクトの上にストレージ オブジェクトを作成します。 StgCreateDocfileOnILockBytes を使用すると、メモリやリレーショナル データベースなどの任意のデータ ストアにドキュメントを格納できます。 バイト配列 (オブジェクトの ILockBytes インターフェイスを指す pLkbyt パラメーターで示されます) は、ディスク ファイルの代わりに基になるストレージに使用されます。

プログラマ指定のバイト配列オブジェクトを指定する場合を除き、 StgCreateDocfileOnILockBytesStgCreateDocfile 関数に似ています。

新しく作成された複合ファイルは、 grfMode パラメーターのアクセス モードに従って開かれます。これには、次の制限があります。

共有モードの動作とトランザクションの分離は、LOCK_ONLYONCEセマンティクスを使用して LockRegionUnlockRegion をサポートする ILockBytes 実装によって異なります。 実装では、STATSTGgrfLocksSupported メンバーにLOCK_ONLYONCE ビットを設定することで、この機能をサポートする構造化ストレージを示すことができます。 ILockBytes 実装でこの機能がサポートされていない場合、共有モードは適用されず、ルート レベルのトランザクション コミットは、同じバイト配列で開かれた他のトランザクション インスタンスと正しく連携しません。 CreateStreamOnHGlobal 実装など、領域ロックをサポートしない ILockBytes 実装を使用するアプリケーションでは、同じバイト配列で複数の同時実行インスタンスを開かないようにする必要があります。

StgCreateDocfileOnILockBytes では、単純モードはサポートされていません。 STGM_SIMPLE フラグが存在する場合は無視されます。

変換の目的で、ファイルは既に存在していると見なされます。 その結果、エラーが返されるため、 STGM_FAILIFTHERE 値を使用しても役に立ちません。 ただし、STGM_CREATEとSTGM_CONVERTの両方が役立ちます。

バイト配列オブジェクトの上に複合ファイルをビルドする機能は、データ ( IStorage および IStream ツリー構造の下) が非永続空間に存在することをサポートするために提供されます。 この機能により、ファイルに格納されているドキュメントでこの機能が使用されるのを妨げるものは何もありません。 たとえば、COM の導入によるファイル形式への影響を最小限に抑えるために、コンテナーでこれを行う場合があります。 ただし、COM ドキュメントでは、独自の外部レベルストレージに IStorage インターフェイスを採用することをお勧めします。 このことには次の利点があります。

  • ドキュメントのストレージ構造は、埋め込みオブジェクトの場合のストレージ構造と同じであるため、アプリケーションで処理する必要があるケースの数が減ります。
  • ドキュメントのファイル形式に関する特別な知識がなくても、ドキュメント内の OLE 埋め込みオブジェクトとリンク オブジェクトにアクセスするためのツールを記述できます。 このようなツールの例として、リンクされたオブジェクトを含むコンテナーに含まれるすべてのドキュメントをコピーするコピー ユーティリティがあります。 このようなコピー ユーティリティでは、コピーするファイルの範囲を決定するために、含まれているリンクにアクセスする必要があります。
  • IStorage の実装では、ファイルへの変更をコミットする方法の問題に対処します。 ILockBytes インターフェイスを使用するアプリケーションでは、これらの問題自体を処理する必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー coml2api.h (Objbase.h を含む)
Library Ole32.lib
[DLL] Ole32.dll

こちらもご覧ください

StgCreateDocfile