Método IPersistStorage::InitNew (objidl.h)
Inicializa un nuevo objeto de almacenamiento.
Sintaxis
HRESULT InitNew(
[in] IStorage *pStg
);
Parámetros
[in] pStg
Puntero de IStorage al nuevo objeto de almacenamiento que se va a inicializar. El contenedor crea un objeto de almacenamiento anidado en su objeto de almacenamiento (consulte IStorage::CreateStorage). A continuación, el contenedor llama a la función WriteClassStg para inicializar el nuevo objeto de almacenamiento con el identificador de clase de objeto (CLSID).
Valor devuelto
Este método puede devolver los siguientes valores.
Código devuelto | Descripción |
---|---|
|
El método se completó correctamente. |
|
El objeto ya se ha inicializado mediante una llamada anterior al método IPersistStorage::Load o al método IPersistStorage::InitNew . |
|
El objeto de almacenamiento no se inicializó debido a una falta de memoria. |
|
El objeto de almacenamiento no se inicializó por algún motivo distinto de la falta de memoria. |
Comentarios
Una aplicación contenedora puede llamar a este método cuando necesite inicializar un nuevo objeto, por ejemplo, con un comando InsertObject.
Un objeto que admita la interfaz IPersistStorage debe tener acceso a un objeto de almacenamiento válido en todo momento mientras se ejecuta. Esto incluye el tiempo justo después de crear el objeto, pero antes de que se haya hecho persistente. El contenedor del objeto debe proporcionar al objeto un puntero IStorage válido al almacenamiento durante este tiempo a través de la llamada a IPersistStorage::InitNew. Según el estado del contenedor, es posible que tenga que crearse un archivo temporal para este fin.
Si el objeto desea conservar la instancia de IStorage , debe llamar a AddRef para incrementar su recuento de referencias.
Después de la llamada a IPersistStorage::InitNew, el objeto está en estado cargado o en ejecución. Por ejemplo, si la clase de objeto tiene un servidor en proceso, el objeto estará en estado de ejecución. Sin embargo, si el objeto usa el controlador predeterminado, la llamada del contenedor a InitNew solo invoca la implementación del controlador que no ejecuta el objeto. Más adelante si el contenedor ejecuta el objeto , el controlador llama al método InitNew para el objeto .
Notas a los autores de llamadas
En lugar de llamar directamente a IPersistStorage::InitNew , normalmente se llama a la función auxiliar OleCreate que hace lo siguiente:- Llama a la función CoCreateInstance para crear una instancia de la clase de objeto.
- Consulta la nueva instancia para la interfaz IPersistStorage .
- Llama al método InitNew para inicializar el objeto .
Notas para los implementadores
Una implementación de IPersistStorage::InitNew debe inicializar el objeto en su estado predeterminado, siguiendo estos pasos:- Abra previamente y almacene en caché los punteros a los flujos o almacenamientos que el objeto tendrá que guardar en este almacenamiento.
- Llame a AddRef y almacene en caché el puntero de almacenamiento que se pasa.
- Llame a la función WriteFmtUserTypeStg para escribir el formato nativo del Portapapeles y la cadena de tipo de usuario para el objeto en el objeto de almacenamiento.
- Establezca la marca desfasada para el objeto .
La implementación de este método debe devolver el código de error CO_E_ALREADYINITIALIZED si recibe una llamada al método IPersistStorage::InitNew o al método IPersistStorage::Load después de que ya se haya inicializado.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 2000 Professional [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows 2000 Server [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | objidl.h |