Compartilhar via


IPersistStorage::InitNew

Windows Mobile SupportedWindows Embedded CE Supported

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:

  1. Chamadas de CoCreateInstance função para criar uma instância da classe de objeto
  2. Consultas a nova instância para o IPersistStorage interface
  3. 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:

  1. Pre-Open e armazenar em cache os ponteiros para todos os fluxos ou armazenamentos que o objeto precisará salvar próprio para este armazenamento.
  2. Chamar IPersistStorage::AddRef e armazenar em cache o ponteiro armazenamento que é passado no.
  3. 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.
  4. 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