Método IPropertyStorage::Commit (propidl.h)

El método IPropertyStorage::Commit guarda los cambios realizados en un objeto de almacenamiento de propiedades en el objeto de almacenamiento primario.

Sintaxis

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

Parámetros

[in] grfCommitFlags

Marcas que especifican las condiciones en las que se va a realizar la confirmación. Para obtener más información sobre marcas específicas y sus significados, vea la sección Comentarios.

Valor devuelto

Este método admite el valor devuelto estándar E_UNEXPECTED, así como lo siguiente:

Comentarios

Al igual que IStorage::Commit, el método IPropertyStorage::Commit garantiza que los cambios realizados en un objeto de almacenamiento de propiedades se reflejen en el almacenamiento primario.

En modo directo en la implementación de archivos compuestos, una llamada a este método hace que los cambios que se produzcan actualmente en los búferes de memoria se vacíe en el flujo de propiedades subyacente. En la implementación de archivos compuestos para conjuntos de propiedades nosimples, también se llama a IStorage::Commit en el objeto substorage subyacente con el parámetro grfCommitFlags pasado.

En el modo de transacción, este método hace que los cambios se reflejen permanentemente en la imagen persistente del objeto de almacenamiento. Los cambios confirmados deben haberse realizado en este conjunto de propiedades desde que se abrió o desde la última confirmación en esta apertura del conjunto de propiedades. El método commit publica los cambios realizados en un nivel de objeto en el siguiente nivel. Por supuesto, esto permanece sujeto a cualquier transacción de nivel externo que pueda estar presente en el objeto en el que se encuentra este conjunto de propiedades. Se debe especificar el permiso de escritura cuando se abre el conjunto de propiedades (a través de IPropertySetStorage) en la apertura del conjunto de propiedades para que la operación de confirmación se realice correctamente.

Si se produce un error en la operación de confirmación por cualquier motivo, el estado del objeto de almacenamiento de propiedades permanece como estaba antes de la confirmación.

Esta llamada no tiene ningún efecto en las propiedades de almacenamiento o valor de secuencia existentes abiertas desde este almacenamiento de propiedades, pero las confirma.

Los valores válidos para el parámetro grfCommitFlags se enumeran en la tabla siguiente.

Valor Significado
STGC_DEFAULT Confirma por la semántica de transacción habitual. El último escritor gana. Es posible que esta marca no se especifique con otros valores de marca.
STGC_ONLYIFCURRENT Confirma los cambios solo si el contenido persistente actual del conjunto de propiedades es el que se basa en los cambios que se van a confirmar. Es decir, no confirma los cambios si el contenido del conjunto de propiedades ha cambiado mediante una confirmación desde otra apertura del conjunto de propiedades. El error STG_E_NOTCURRENT se devuelve si la confirmación no se realiza correctamente por este motivo.
STGC_OVERWRITE Útil solo cuando se confirma una transacción que no tiene ningún nivel de anidamiento externo adicional de transacciones, aunque aceptable en todos los casos.
Nota Indica que el autor de la llamada está dispuesto a arriesgar algunos datos dañados a costa de reducir el uso del disco en el volumen de destino. Esta marca es potencialmente útil en escenarios de espacio en disco bajo, aunque debe usarse con precaución.
 
 
Nota El uso de IPropertyStorage::Commit para escribir propiedades en archivos de imagen en Windows XP no funciona. Los formatos de archivo de imagen afectados incluyen:
  • .bmp
  • .dib
  • .emf
  • .gif
  • .ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • .Rle
  • .tiff
  • .wmf
Debido a un error en el controlador de propiedades de archivo de imagen en Windows XP, llamar a IPropertyStorage::Commit realmente descarta los cambios realizados en lugar de conservarlos.

Una solución alternativa consiste en

omita la llamada a IPropertyStorage::Commit. Al llamar a IUnknown::Release en el controlador de propiedades de archivo de imagen XP sin llamar a IPropertyStorage::Commit , primero se confirman implícitamente los cambios en el archivo. Tenga en cuenta que, en general, llamar a IUnknown::Release sin llamar primero a IPropertyStorage::Commit descartará los cambios realizados; esta solución alternativa es específica del controlador de propiedades de archivo de imagen en Windows XP. Tenga en cuenta también que, en versiones posteriores de Windows, este componente funciona correctamente (es decir, llamar a IPropertyStorage::Commit conserva los cambios y llama a IUnknown::Release sin llamar a IPropertyStorage::Commit los descarta).

 

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado propidl.h (include Objbase.h, Propidlbase.h)
Library Uuid.lib
Archivo DLL Ole32.dll

Consulte también

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit