Metodo IPersistStorage::InitNew (objidl.h)
Inizializza un nuovo oggetto di archiviazione.
Sintassi
HRESULT InitNew(
[in] IStorage *pStg
);
Parametri
[in] pStg
Puntatore IStorage al nuovo oggetto di archiviazione da inizializzare. Il contenitore crea un oggetto di archiviazione annidato nel relativo oggetto di archiviazione (vedere IStorage::CreateStorage). Il contenitore chiama quindi la funzione WriteClassStg per inizializzare il nuovo oggetto di archiviazione con l'identificatore di classe oggetto (CLSID).
Valore restituito
Questo metodo può restituire i valori seguenti.
Codice restituito | Descrizione |
---|---|
|
Metodo completato correttamente. |
|
L'oggetto è già stato inizializzato da una chiamata precedente al metodo IPersistStorage::Load o al metodo IPersistStorage::InitNew . |
|
L'oggetto di archiviazione non è stato inizializzato a causa di una mancanza di memoria. |
|
L'oggetto di archiviazione non è stato inizializzato per qualche motivo diverso da una mancanza di memoria. |
Commenti
Un'applicazione contenitore può chiamare questo metodo quando deve inizializzare un nuovo oggetto, ad esempio con un comando InsertObject.
Un oggetto che supporta l'interfaccia IPersistStorage deve avere accesso a un oggetto di archiviazione valido in ogni momento durante l'esecuzione. Ciò include il tempo appena dopo la creazione dell'oggetto, ma prima che sia stato reso persistente. Il contenitore dell'oggetto deve fornire all'oggetto un puntatore IStorage valido all'archiviazione durante questa volta tramite la chiamata a IPersistStorage::InitNew. A seconda dello stato del contenitore, potrebbe essere necessario creare un file temporaneo per questo scopo.
Se l'oggetto vuole conservare l'istanza di IStorage , deve chiamare AddRef per aumentare il numero di riferimenti.
Dopo la chiamata a IPersistStorage::InitNew, l'oggetto si trova nello stato caricato o in esecuzione. Ad esempio, se la classe oggetto ha un server in-process, l'oggetto sarà nello stato in esecuzione. Tuttavia, se l'oggetto usa il gestore predefinito, la chiamata del contenitore a InitNew richiama solo l'implementazione del gestore che non esegue l'oggetto. In seguito, se il contenitore esegue l'oggetto, il gestore chiama il metodo InitNew per l'oggetto.
Note ai chiamanti
Anziché chiamare direttamente IPersistStorage::InitNew , si chiama in genere la funzione helper OleCreate che esegue le operazioni seguenti:- Chiama la funzione CoCreateInstance per creare un'istanza della classe oggetto.
- Esegue una query sulla nuova istanza per l'interfaccia IPersistStorage .
- Chiama il metodo InitNew per inizializzare l'oggetto.
Note per gli implementatori
Un'implementazione di IPersistStorage::InitNew deve inizializzare l'oggetto allo stato predefinito, seguendo questa procedura:- Pre-aprire e memorizzare nella cache i puntatori a qualsiasi flusso o archiviazione che l'oggetto dovrà salvare in questa risorsa di archiviazione.
- Chiamare AddRef e memorizzare nella cache il puntatore di archiviazione passato.
- Chiamare la funzione WriteFmtUserTypeStg per scrivere il formato nativo degli Appunti e la stringa di tipo utente per l'oggetto nell'oggetto di archiviazione.
- Impostare il flag sporco per l'oggetto.
L'implementazione di questo metodo deve restituire il codice di errore CO_E_ALREADYINITIALIZED se riceve una chiamata al metodo IPersistStorage::InitNew o al metodo IPersistStorage::Load dopo l'inizializzazione.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | objidl.h |