IPropertyStorage::Commit メソッド (propidl.h)

IPropertyStorage::Commit メソッドは、プロパティ ストレージ オブジェクトに加えられた変更を親ストレージ オブジェクトに保存します。

構文

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

パラメーター

[in] grfCommitFlags

コミットを実行する条件を指定するフラグ。 特定のフラグとその意味の詳細については、「解説」セクションを参照してください。

戻り値

このメソッドは、標準の戻り値E_UNEXPECTEDと、次の値をサポートしています。

注釈

IStorage::Commit と同様に、IPropertyStorage::Commit メソッドを使用すると、プロパティ ストレージ オブジェクトに加えられた変更が親ストレージに確実に反映されます。

複合ファイル実装のダイレクト モードでは、このメソッドを呼び出すと、現在メモリ バッファー内のすべての変更が基になるプロパティ ストリームにフラッシュされます。 非シンプル プロパティ セットの複合ファイル実装では、渡された grfCommitFlags パラメーターを使用して、基になるサブストレージ オブジェクトで IStorage::Commit も呼び出されます。

トランザクション モードでは、このメソッドを使用すると、ストレージ オブジェクトの永続イメージに変更が完全に反映されます。 コミットされる変更は、このプロパティ セットが開かれた後、またはプロパティ セットのこのオープン時の最後のコミット以降に、このプロパティ セットに対して行われる必要があります。 commit メソッドは、あるオブジェクト レベルで行われた変更を次のレベルに発行します。 もちろん、これは、このプロパティ セットが含まれているオブジェクトに存在する可能性がある外部レベルのトランザクションの対象のままです。 コミット操作を成功させるには、プロパティ セットを開くプロパティ セットで ( IPropertySetStorage を介して) 開くときに、書き込みアクセス許可を指定する必要があります。

何らかの理由でコミット操作が失敗した場合、プロパティ ストレージ オブジェクトの状態はコミット前のままです。

この呼び出しは、このプロパティ ストレージから開かれた既存のストレージ プロパティまたはストリーム値プロパティには影響しませんが、コミットされます。

grfCommitFlags パラメーターの有効な値を次の表に示します。

意味
STGC_DEFAULT 通常のトランザクション セマンティクスに従ってコミットします。 最後のライターが優先されます。 このフラグは、他のフラグ値と共に指定することはできません。
STGC_ONLYIFCURRENT プロパティ セットの現在の永続的な内容が、コミットされる予定の変更の基になるコンテンツである場合にのみ、変更をコミットします。 つまり、プロパティ セットの内容がプロパティ セットの別のオープンからのコミットによって変更された場合、変更はコミットされません。 この理由でコミットが成功しなかった場合、エラー STG_E_NOTCURRENTが返されます。
STGC_OVERWRITE それ以上外部の入れ子レベルのトランザクションを持たないトランザクションをコミットする場合にのみ役立ちますが、すべてのケースで許容されます。
メモ 呼び出し元が、宛先ボリュームでのディスク使用量の減少を犠牲にして、データの破損を危険にさらす意思があることを示します。 このフラグは、ディスク領域が少ないシナリオでは役立つ可能性がありますが、慎重に使用する必要があります。
 
 
メモ Windows XP で IPropertyStorage::Commit を使用してイメージ ファイルにプロパティを書き込むのは機能しません。 影響を受けるイメージ ファイル形式は次のとおりです。
  • .bmp
  • .dib
  • .emf
  • .gif
  • .ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • 。Rle
  • .tiff
  • .wmf
Windows XP のイメージ ファイル プロパティ ハンドラーのバグにより、 IPropertyStorage::Commit を呼び出すと、実際に行われた変更は永続化されずに破棄されます。

回避策は次のとおりです。

IPropertyStorage::Commit の呼び出しを省略します。 IPropertyStorage::Commit を呼び出さずに XP イメージ ファイルのプロパティ ハンドラーで IUnknown::Release を呼び出すと、最初にファイルへの変更が暗黙的にコミットされます。 一般に、 IPropertyStorage ::Commit を最初に呼び出さずに IUnknown::Release を呼び出すと、行われた変更は破棄されることに注意してください。この回避策は、Windows XP のイメージ ファイル プロパティ ハンドラーに固有です。 また、新しいバージョンの Windows では、このコンポーネントが正しく機能します (つまり、 IPropertyStorage::Commit を呼び出すと変更が保持され、 IPropertyStorage::Commit を呼び出さずに IUnknown::Release を呼び出すと破棄されます)。

 

要件

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

こちらもご覧ください

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit