IPropertyStorage::Commit-Methode (propidl.h)

Die IPropertyStorage::Commit-Methode speichert Änderungen, die an einem Eigenschaftsspeicherobjekt vorgenommen wurden, im übergeordneten Speicherobjekt.

Syntax

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parameter

[in] grfCommitFlags

Die Flags, die die Bedingungen angeben, unter denen der Commit ausgeführt werden soll. Weitere Informationen zu bestimmten Flags und deren Bedeutung finden Sie im Abschnitt Hinweise.

Rückgabewert

Diese Methode unterstützt den Standardrückgabewert E_UNEXPECTED sowie Folgendes:

Hinweise

Wie IStorage::Commit stellt die IPropertyStorage::Commit-Methode sicher, dass alle An einem Eigenschaftsspeicherobjekt vorgenommenen Änderungen im übergeordneten Speicher widergespiegelt werden.

Im direkten Modus in der Verbunddateiimplementierung bewirkt ein Aufruf dieser Methode, dass alle Änderungen, die derzeit in den Speicherpuffern enthalten sind, in den zugrunde liegenden Eigenschaftendatenstrom geleert werden. In der Verbunddateiimplementierung für nicht einfache Eigenschaftssätze wird IStorage::Commit auch für das zugrunde liegende Unterspeicherobjekt mit dem übergebenen grfCommitFlags-Parameter aufgerufen.

Im transaktionsfähigen Modus bewirkt diese Methode, dass die Änderungen dauerhaft im persistenten Bild des Speicherobjekts widergespiegelt werden. Die Änderungen, die committet werden, müssen an diesem Eigenschaftssatz vorgenommen worden sein, seit er geöffnet wurde oder seit dem letzten Commit bei diesem Öffnen des Eigenschaftensatzes. Die commit-Methode veröffentlicht die auf einer Objektebene vorgenommenen Änderungen auf der nächsten Ebene. Dies unterliegt natürlich jeder Transaktion auf äußerer Ebene, die für das Objekt vorhanden sein kann, in dem dieser Eigenschaftssatz enthalten ist. Die Schreibberechtigung muss angegeben werden, wenn der Eigenschaftssatz geöffnet wird (über IPropertySetStorage), damit der Commitvorgang erfolgreich ist.

Wenn der Commitvorgang aus irgendeinem Grund fehlschlägt, bleibt der Zustand des Eigenschaftsspeicherobjekts so, wie er vor dem Commit war.

Dieser Aufruf hat keine Auswirkungen auf vorhandene Speicher- oder Streamwerteigenschaften, die aus diesem Eigenschaftsspeicher geöffnet werden, aber er führt einen Commit aus.

Gültige Werte für den grfCommitFlags-Parameter sind in der folgenden Tabelle aufgeführt.

Wert Bedeutung
STGC_DEFAULT Commits gemäß der üblichen Transaktionssemantik. Letzter Schreiber gewinnt. Dieses Flag darf nicht mit anderen Flagwerten angegeben werden.
STGC_ONLYIFCURRENT Committent die Änderungen nur, wenn der aktuelle persistente Inhalt des Eigenschaftssatzes diejenigen sind, auf denen die Änderungen basieren, auf denen ein Commit ausgeführt werden soll. Das bedeutet, dass änderungen nicht committen, wenn der Inhalt des Eigenschaftensatzes durch einen Commit aus einem anderen Öffnen des Eigenschaftensatzes geändert wurde. Der Fehler STG_E_NOTCURRENT wird zurückgegeben, wenn der Commit aus diesem Grund nicht erfolgreich ist.
STGC_OVERWRITE Nur nützlich beim Committen einer Transaktion, die keine weitere äußere Schachtelungsebene von Transaktionen aufweist, obwohl sie in allen Fällen akzeptabel ist.
Hinweis Gibt an, dass der Aufrufer bereit ist, eine Datenbeschädigung zu Lasten einer verringerten Datenträgernutzung auf dem Zielvolume zu riskieren. Dieses Flag ist in Szenarien mit geringem Speicherplatz potenziell nützlich, sollte jedoch mit Vorsicht verwendet werden.
 
 
Hinweis Die Verwendung von IPropertyStorage::Commit zum Schreiben von Eigenschaften in Bilddateien unter Windows XP funktioniert nicht. Zu den betroffenen Bilddateiformaten gehören:
  • BMP
  • DIB
  • .emf
  • .gif
  • .ico
  • JFIF
  • JPE
  • JPEG
  • .jpg
  • .png
  • .Rle
  • TIFF
  • .wmf
Aufgrund eines Fehlers im Imagedateieigenschaftenhandler unter Windows XP verwirft der Aufruf von IPropertyStorage::Commit tatsächlich alle vorgenommenen Änderungen, anstatt sie beizubehalten.

Eine Problemumgehung besteht darin,

lassen Sie den Aufruf von IPropertyStorage::Commit aus. Das Aufrufen von IUnknown::Release im XP-Imagedatei-Eigenschaftshandler, ohne IPropertyStorage::Commit aufzurufen, committ zuerst implizit die Änderungen in die Datei. Beachten Sie, dass das Aufrufen von IUnknown::Release ohne ersten Aufruf von IPropertyStorage::Commit im Allgemeinen alle vorgenommenen Änderungen verwirft. Diese Problemumgehung ist spezifisch für den Imagedateieigenschaftenhandler unter Windows XP. Beachten Sie auch, dass diese Komponente in späteren Versionen von Windows ordnungsgemäß funktioniert (d. h., das Aufrufen von IPropertyStorage::Commit behält Änderungen bei, und der Aufruf von IUnknown::Release ohne Aufruf von IPropertyStorage::Commit verwirft sie).

 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile propidl.h (include Objbase.h, Propidlbase.h)
Bibliothek Uuid.lib
DLL Ole32.dll

Weitere Informationen

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit