IPersistStorage::InitNew
9/8/2008
Este método Inicializa um objeto novo, fornecendo um ponteiro para o armazenamento a ser usado para o objeto.
Syntax
HRESULT InitNew(
IStorage* pStg
);
Parameters
pStg
[no] IStorage ponteiro para o novo objeto armazenamento para ser inicializado.O contêiner cria um objeto armazenamento aninhados no seu objeto armazenamento (consulte IStorage::CreateStorage). Então, as chamadas contêiner de WriteClassStg função para inicializar o novo objeto armazenamento com identificador de classe objeto (CLSID).
Return Value
A seguinte tabela mostra os valores de retorno para este método.
Valor | Descrição |
---|---|
S_OK |
O novo objeto armazenamento foi inicializado com êxito. |
CO_E_ALREADYINITIALIZED |
O objeto já foi inicializado por um chamar anterior para o IPersistStorage::Load método ou a IPersistStorage::InitNew método. |
E_OUTOFMEMORY |
O objeto armazenamento não foi inicializado devido a uma falta de memória. |
E_FAIL |
O objeto armazenamento não foi inicializado por algum motivo que não seja a falta de memória. |
Remarks
Um aplicativo contêiner pode chamar esse método quando ele precisa inicializar um novo objeto, de exemplo, com um comando InsertObject.
Um objeto que ofereça suporte a IPersistStorage interface precisa acessar para um válido objeto armazenamento em todos os momentos enquanto ele estiver execução. Isso inclui o tempo apenas após o objeto foi criado, mas antes ele tiver sido feito persistentes.
Contêiner do objeto deve fornecer o objeto com um válido IStorage ponteiro para o armazenamento durante esse tempo por meio de chamar para IPersistStorage::InitNew.
Depending on estado do contêiner, um arquivo temporário talvez tenha que ser criado para essa finalidade.
Se o objeto desejar reter a IStorage instância, ele deve chamar o IUnknown::AddRef método para incremento seu contagem de referência.
Depois de chamar para IPersistStorage::InitNew, o objeto está em um o carregado ou execução estado.
De exemplo, se a classe objeto tem um in-process server, o objeto estará na execução estado. No entanto, se o objeto usa o manipulador usar como padrão, chamar do o contêiner para InitNew Somente chama implementação do manipulador, que não executar o objeto.
Posteriormente, se o contêiner Executa o objeto, o manipulador chama o IPersistStorage::InitNew método para o objeto.
Para determinar se a plataforma oferece suporte a esta interface, consulte Determinando suporte COM APIs.
Notas para chamadores
Rather than chamado IPersistStorage::InitNew diretamente, você geralmente chamar o OleCreate função auxiliar que faz o seguinte:
- Chamadas de CoCreateInstance função para criar uma instância da classe de objeto
- Consultas a nova instância para o IPersistStorage interface
- Chamadas de IPersistStorage::InitNew método para inicializar o objeto
O aplicativo contêiner deve armazenar em cache o IPersistStorage ponteiro para o objeto para uso em operações posteriores no objeto.
Notas para Implementers
Uma implementação de IPersistStorage::InitNew deve inicializar o objeto para seu estado usar como padrão, levando as seguinte etapas:
- Pre-Open e armazenar em cache os ponteiros para todos os fluxos ou armazenamentos que o objeto precisará salvar próprio para este armazenamento.
- Chamar IPersistStorage::AddRef e armazenar em cache o ponteiro armazenamento que é passado no.
- Chamar o WriteFmtUserTypeStg função para escrever a nativo formato de Área de Transferência e seqüência de caracteres tipo usuário para o objeto para o objeto armazenamento.
- Defina o sinalizador sujo para o objeto.
As duas primeiras etapas são particularmente importantes para assegurar que o objeto pode salvar próprio em situações memória baixa. Pre-opening e mantendo até os ponteiros para as interfaces transmitir e armazenamento garantem que um salvar operação para esse armazenamento não falhará devido a memória insuficiente.
Sua implementação desse método deve retornar o código de erro CO_E_ALREADYINITIALIZED se ele recebe um chamar para o IPersistStorage::InitNew método ou a IPersistStorage::Load método após ele já foi inicializado.
Requirements
Header | objidl.h, objidl.idl |
Library | ole32.lib, uuid.lib |
Windows Embedded CE | Windows CE 2.0 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |
See Also
Reference
WriteClassStg
IPersistStorage
IStorage
IStorage::CreateStorage
IPersistStorage::Load
IUnknown::AddRef