Método IMoniker::GetTimeOfLastChange (objidl.h)

Recupera a hora em que o objeto identificado por esse moniker foi alterado pela última vez.

Sintaxe

HRESULT GetTimeOfLastChange(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [out] FILETIME *pFileTime
);

Parâmetros

[in] pbc

Um ponteiro para o contexto de associação a ser usado nesta operação de associação. O contexto de associação armazena em cache objetos associados durante o processo de associação, contém parâmetros que se aplicam a todas as operações usando o contexto de associação e fornece os meios pelos quais a implementação do moniker deve recuperar informações sobre seu ambiente. Para obter mais informações, consulte IBindCtx.

[in] pmkToLeft

Se o moniker fizer parte de um moniker composto, ponteiro para o moniker à esquerda deste moniker. Esse parâmetro é usado principalmente por implementadores de moniker para habilitar a cooperação entre os vários componentes de um moniker composto. Os clientes Moniker devem passar NULL.

[out] pFileTime

Um ponteiro para a estrutura FILETIME que recebe a hora da última alteração. Um valor de {0xFFFFFFFF,0x7FFFFFFF} indica um erro (por exemplo, limite de tempo excedido, informações não disponíveis).

Retornar valor

Esse método pode retornar os valores de retorno padrão E_OUTOFMEMORY, bem como os valores a seguir.

Código de retorno Descrição
S_OK
O método foi concluído com sucesso.
MK_E_EXCEEDEDDEADLINE
A operação de associação não pôde ser concluída dentro do limite de tempo especificado pela estrutura de BIND_OPTS do contexto de associação.
MK_E_CONNECTMANUALLY
A operação não pôde se conectar ao armazenamento desse objeto, possivelmente porque um dispositivo de rede não pôde ser conectado. Para obter mais informações, consulte IMoniker::BindToObject.
MK_E_UNAVAILABLE
A hora da alteração não está disponível e não estará disponível independentemente do prazo que for usado.

Comentários

Para ser preciso, o tempo retornado é a primeira vez que COM pode identificar após o qual nenhuma alteração ocorreu, portanto, essa hora pode ser posterior à hora da última alteração no objeto.

Anotações para chamadores

Se você estiver armazenando em cache as informações retornadas pelo objeto identificado pelo moniker, convém garantir que suas informações estejam atualizadas. Para fazer isso, você chamaria GetTimeOfLastChange e compararia o tempo retornado com a hora em que você recuperou informações do objeto pela última vez.

Para os monikers armazenados em objetos vinculados, GetTimeOfLastChange é chamado principalmente pela implementação do manipulador padrão de IOleObject::IsUpToDate. Os aplicativos de contêiner chamam IOleObject::IsUpToDate para determinar se um objeto vinculado (ou um objeto inserido que contém objetos vinculados) está atualizado sem realmente associar ao objeto . Isso permite que um aplicativo determine rapidamente quais objetos vinculados exigem atualização quando o usuário final abre um documento. Em seguida, o aplicativo pode associar somente os objetos vinculados que precisam de atualização (depois de solicitar que o usuário final determine se ele deve ser atualizado) em vez de associar todos os objetos vinculados no documento.

Anotações aos implementadores

É importante executar essa operação rapidamente porque, para objetos vinculados, esse método é chamado quando um usuário abre um documento composto pela primeira vez. Consequentemente, sua implementação GetTimeOfLastChange não deve ser associada a nenhum objeto. Além disso, sua implementação deve marcar o parâmetro de prazo no contexto de associação e retornar MK_E_EXCEEDEDDEADLINE se a operação não puder ser concluída pela hora especificada.

A seguir estão algumas estratégias que você pode usar em suas implementações:

  • Para muitos tipos de monikers, o parâmetro pmkToLeft identifica o contêiner do objeto identificado por esse moniker. Se isso for verdadeiro para sua classe moniker, você pode simplesmente chamar GetTimeOfLastChange no parâmetro pmkToLeft , pois um objeto não pode ter sido alterado em uma data posterior ao contêiner.
  • Você pode obter um ponteiro para a ROT (tabela de objetos em execução) chamando IBindCtx::GetRunningObjectTable no parâmetro pbc e, em seguida, chamando IRunningObjectTable::GetTimeOfLastChange, porque a ROT geralmente registra a hora da última alteração.
  • Você pode obter o armazenamento associado a esse moniker (ou ao moniker pmkToLeft ) e retornar o último tempo de modificação do armazenamento com uma chamada para IStorage::Stat.

Notas específicas da implementação

Implementação Observações
Anti-moniker Esse método retorna E_NOTIMPL.
Moniker de classe Esse método retorna MK_E_UNAVAILABLE.
Moniker de arquivo Se esse moniker estiver no ROT, esse método retornará o último tempo de alteração registrado lá; caso contrário, ele retorna a última hora de gravação para o arquivo. Se o arquivo não puder ser encontrado, esse método retornará MK_E_NOOBJECT.
Moniker composto genérico Esse método cria uma composição de pmkToLeft (se não NULL) e esse moniker e usa o ROT para recuperar a hora da última alteração. Se o objeto não estiver no ROT, o método chamará Recursivamente GetTimeOfLastChange no componente mais à direita da composição, passando o restante da composição como o parâmetro pmkToLeft para essa chamada.
Moniker de item Se pmkToLeft for NULL, esse método retornará MK_E_NOTBINDABLE. Caso contrário, o método cria uma composição de pmkToLeft e esse moniker e usa a ROT para acessar a hora da última alteração. Se o objeto não estiver no ROT, o método chamará GetTimeOfLastChange no parâmetro pmkToLeft .
Moniker OBJREF Esse método retorna E_NOTIMPL.
Moniker de ponteiro Esse método retorna E_NOTIMPL.
Moniker de URL Esse método retorna a hora da última alteração de um objeto registrado no ROT.

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

Confira também

Imoniker

IRunningObjectTable::GetTimeOfLastChange