Método IPersistStorage::InitNew (objidl.h)
Inicializa um novo objeto de armazenamento.
Sintaxe
HRESULT InitNew(
[in] IStorage *pStg
);
Parâmetros
[in] pStg
Um ponteiro IStorage para o novo objeto de armazenamento a ser inicializado. O contêiner cria um objeto de armazenamento aninhado em seu objeto de armazenamento (consulte IStorage::CreateStorage). Em seguida, o contêiner chama a função WriteClassStg para inicializar o novo objeto de armazenamento com o CLSID (identificador de classe de objeto).
Retornar valor
Esse método pode retornar os valores a seguir.
Código de retorno | Descrição |
---|---|
|
O método foi concluído com sucesso. |
|
O objeto já foi inicializado por uma chamada anterior para o método IPersistStorage::Load ou o método IPersistStorage::InitNew . |
|
O objeto de armazenamento não foi inicializado devido à falta de memória. |
|
O objeto de armazenamento não foi inicializado por algum motivo diferente da falta de memória. |
Comentários
Um aplicativo de contêiner pode chamar esse método quando precisa inicializar um novo objeto, por exemplo, com um comando InsertObject.
Um objeto que dá suporte à interface IPersistStorage deve ter acesso a um objeto de armazenamento válido o tempo todo enquanto ele está em execução. Isso inclui o tempo logo após a criação do objeto, mas antes de se tornar persistente. O contêiner do objeto deve fornecer ao objeto um ponteiro IStorage válido para o armazenamento durante esse tempo por meio da chamada para IPersistStorage::InitNew. Dependendo do estado do contêiner, um arquivo temporário pode ter que ser criado para essa finalidade.
Se o objeto quiser manter a instância do IStorage , ele deverá chamar AddRef para incrementar sua contagem de referência.
Após a chamada para IPersistStorage::InitNew, o objeto está no estado carregado ou em execução. Por exemplo, se a classe de objeto tiver um servidor em processo, o objeto estará no estado em execução. No entanto, se o objeto usar o manipulador padrão, a chamada do contêiner para InitNew invocará apenas a implementação do manipulador que não executa o objeto. Posteriormente, se o contêiner executar o objeto , o manipulador chamará o método InitNew para o objeto .
Anotações para chamadores
Em vez de chamar IPersistStorage::InitNew diretamente, você normalmente chama a função auxiliar OleCreate , que faz o seguinte:- Chama a função CoCreateInstance para criar uma instância da classe de objeto.
- Consulta a nova instância da interface IPersistStorage .
- Chama o método InitNew para inicializar o objeto.
Anotações aos implementadores
Uma implementação de IPersistStorage::InitNew deve inicializar o objeto para seu estado padrão, seguindo as seguintes etapas:- Abra previamente e armazene os ponteiros em cache para quaisquer fluxos ou armazenamentos que o objeto precisará para se salvar nesse armazenamento.
- Chame AddRef e armazene em cache o ponteiro de armazenamento que é passado.
- Chame a função WriteFmtUserTypeStg para gravar o formato nativo da área de transferência e a cadeia de caracteres de tipo de usuário do objeto no objeto de armazenamento.
- Defina o sinalizador sujo para o objeto .
Sua implementação desse método deverá retornar o código de erro CO_E_ALREADYINITIALIZED se ele receber uma chamada para o método IPersistStorage::InitNew ou o método IPersistStorage::Load depois que ele já estiver inicializado.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | objidl.h |