Metodo IPropertyStorage::Commit (propidl.h)

Il metodo IPropertyStorage::Commit salva le modifiche apportate a un oggetto di archiviazione delle proprietà nell'oggetto di archiviazione padre.

Sintassi

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parametri

[in] grfCommitFlags

Flag che specificano le condizioni in cui deve essere eseguito il commit. Per altre informazioni su flag specifici e sui relativi significati, vedere la sezione Osservazioni.

Valore restituito

Questo metodo supporta il valore restituito standard E_UNEXPECTED, nonché quanto segue:

Commenti

Come IStorage::Commit, il metodo IPropertyStorage::Commit garantisce che tutte le modifiche apportate a un oggetto di archiviazione delle proprietà vengano riflesse nell'archiviazione padre.

In modalità diretta nell'implementazione del file composto, una chiamata a questo metodo causa eventuali modifiche attualmente presenti nei buffer di memoria da scaricare nel flusso di proprietà sottostante. Nell'implementazione del file composto per i set di proprietà nonsimple, IStorage::Commit viene chiamato anche nell'oggetto sottostorage sottostante con il parametro grfCommitFlags passato.

In modalità transazionata, questo metodo causa la riflessione permanente delle modifiche nell'immagine persistente dell'oggetto di archiviazione. Le modifiche che vengono sottoposte a commit devono essere state apportate a questo set di proprietà dopo l'apertura o dall'ultimo commit in questa apertura del set di proprietà. Il metodo commit pubblica le modifiche apportate a un livello di oggetto al livello successivo. Naturalmente, questo rimane soggetto a qualsiasi transazione a livello esterno che può essere presente nell'oggetto in cui è contenuto questo set di proprietà. L'autorizzazione di scrittura deve essere specificata quando il set di proprietà viene aperto (tramite IPropertySetStorage) nel set di proprietà che apre l'operazione di commit.

Se l'operazione di commit ha esito negativo per qualsiasi motivo, lo stato dell'oggetto di archiviazione delle proprietà rimane invariato prima del commit.

Questa chiamata non ha alcun effetto sulle proprietà di archiviazione esistenti o con valori di flusso aperte da questa risorsa di archiviazione delle proprietà, ma esegue il commit.

I valori validi per il parametro grfCommitFlags sono elencati nella tabella seguente.

Valore Significato
STGC_DEFAULT Commit per la semantica delle transazioni consueta. L'ultimo scrittore vince. Questo flag potrebbe non essere specificato con altri valori di flag.
STGC_ONLYIFCURRENT Esegue il commit delle modifiche solo se il contenuto persistente corrente del set di proprietà è quello in cui vengono eseguite le modifiche da eseguire per il commit. In questo caso, non esegue il commit delle modifiche se il contenuto del set di proprietà è stato modificato da un commit da un'altra apertura del set di proprietà. L'errore STG_E_NOTCURRENT viene restituito se il commit non riesce per questo motivo.
STGC_OVERWRITE Utile solo quando si esegue il commit di una transazione che non ha un ulteriore livello di annidamento esterno delle transazioni, anche se accettabile in tutti i casi.
Nota Indica che il chiamante è disposto a rischiare un danneggiamento dei dati a spese dell'utilizzo del disco ridotto nel volume di destinazione. Questo flag è potenzialmente utile negli scenari di spazio su disco ridotto, anche se deve essere usato con cautela.
 
 
Nota L'uso di IPropertyStorage::Commit per scrivere proprietà nei file di immagine in Windows XP non funziona. I formati di file di immagine interessati includono:
  • bmp
  • dib
  • emf
  • gif
  • ico
  • jfif
  • jpe
  • jpeg
  • jpg
  • png
  • .Rle
  • tiff
  • .Wmf
A causa di un bug nel gestore delle proprietà del file di immagine in Windows XP, la chiamata di IPropertyStorage::Commit elimina effettivamente le modifiche apportate anziché renderle persistenti.

Una soluzione alternativa consiste nel

omettere la chiamata a IPropertyStorage::Commit. Chiamata di IUnknown::Release nel gestore della proprietà file immagine XP senza chiamare IPropertyStorage::Commit esegue prima il commit implicito delle modifiche al file. Si noti che in generale, chiamando IUnknown::Release senza prima chiamare IPropertyStorage ::Commit eliminerà eventuali modifiche apportate; questa soluzione alternativa è specifica del gestore della proprietà file di immagine in Windows XP. Si noti anche che nelle versioni successive di Windows, questo componente funziona correttamente, ovvero la chiamata di IPropertyStorage::Commit mantiene le modifiche e chiama IUnknown::Release senza chiamare IPropertyStorage::Commit li elimina.

 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [app desktop | App UWP]
Server minimo supportato Windows 2000 Server [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione propidl.h (include Objbase.h, Propidlbase.h)
Libreria Uuid.lib
DLL Ole32.dll

Vedi anche

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit