次の方法で共有


IPersistStorage::Load メソッド (objidl.h)

オブジェクトを既存のストレージから読み込みます。

構文

HRESULT Load(
  [in] IStorage *pStg
);

パラメーター

[in] pStg

オブジェクトの読み込み元となる既存のストレージへの IStorage ポインター。

戻り値

このメソッドは、次の値を返すことができます。

リターン コード 説明
S_OK
メソッドは正常に完了しました。
CO_E_ALREADYINITIALIZED
オブジェクトは、IPersistStorage::Load メソッドまたは IPersistStorage::InitNew メソッドの以前の呼び出しによって既に初期化されています。
E_OUTOFMEMORY
メモリ不足のため、オブジェクトが読み込まれていませんでした。
E_FAIL
メモリ不足以外の何らかの理由により、オブジェクトが読み込まれていませんでした。

注釈

このメソッドは、既存のストレージからオブジェクトを初期化します。 このメソッドがコンテナー アプリケーションによって呼び出された場合、オブジェクトは読み込まれた状態になります。 既定のハンドラーによって呼び出された場合、このメソッドは オブジェクトを実行中の状態にします。

既定のハンドラーまたはオブジェクト自体は、オブジェクトの読み込み中または実行中に IStorage ポインターを保持できます。

呼び出し元へのメモ

IPersistStorage::Load を直接呼び出すのではなく、通常、OleLoad ヘルパー関数を呼び出すと、次の処理が行われます。
  1. オブジェクト クラスの初期化されていないインスタンスを作成します。
  2. IPersistStorage インターフェイスの新しいインスタンスに対してクエリを実行します。
  3. Load を呼び出して、既存のストレージから オブジェクトを初期化します。
また、OleCreateFromData 関数または OleCreateFromFile 関数を呼び出して(ドラッグ アンド ドロップまたはクリップボードの貼り付け操作のように) オブジェクトを複合ファイルに挿入するときにも、このメソッドを間接的に呼び出します。

コンテナーは、オブジェクトに対する後の操作で使用するために 、IPersistStorage ポインターをキャッシュする必要があります。

実装者へのメモ

実装では、オブジェクトを読み込むには、次の手順を実行する必要があります。
  1. ストレージ オブジェクトでオブジェクトのストリームを開き、オブジェクトの内部データ構造に必要なデータを読み取ります。
  2. オブジェクトの ダーティ フラグをクリアします。
  3. AddRef メソッドを呼び出し、渡された をストレージ ポインターにキャッシュします。
  4. 開いたままにして、オブジェクトがこのストレージに自身を保存するために必要なストリームまたはストレージへのポインターをキャッシュします。
  5. オブジェクトに必要なその他の既定の初期化を実行します。
手順 3 と 4 は、オブジェクトがメモリ不足の状況で自身を保存できるようにするために特に重要です。 記憶域インターフェイスとストリーム インターフェイスへのポインターを保持すると、メモリ不足のため、このストレージへの保存操作が失敗しないことが保証されます。

このメソッドの実装では、IPersistStorage::InitNew メソッドまたは IPersistStorage::Load メソッドの呼び出しが既に初期化された後に受け取った場合は、CO_E_ALREADYINITIALIZED エラー コードを返す必要があります。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h

こちらもご覧ください

IPersistStorage

OleLoad