Condividi tramite


Metodo IMoniker::GetTimeOfLastChange (objidl.h)

Recupera l'ora dell'ultima modifica dell'oggetto identificato da questo moniker.

Sintassi

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

Parametri

[in] pbc

Puntatore al contesto di associazione da utilizzare in questa operazione di associazione. Il contesto di associazione memorizza nella cache gli oggetti associati durante il processo di associazione, contiene parametri che si applicano a tutte le operazioni che usano il contesto di associazione e fornisce i mezzi con cui l'implementazione del moniker deve recuperare informazioni sul relativo ambiente. Per altre informazioni, vedere IBindCtx.

[in] pmkToLeft

Se il moniker fa parte di un moniker composito, puntatore al moniker a sinistra di questo moniker. Questo parametro viene usato principalmente dagli implementatori di moniker per consentire la cooperazione tra i vari componenti di un moniker composito. I client moniker devono passare NULL.

[out] pFileTime

Puntatore alla struttura FILETIME che riceve l'ora dell'ultima modifica. Il valore {0xFFFFFFFF,0x7FFFFFFF} indica un errore, ad esempio superato il limite di tempo e le informazioni non disponibili.

Valore restituito

Questo metodo può restituire i valori restituiti standard E_OUTOFMEMORY, nonché i valori seguenti.

Codice restituito Descrizione
S_OK
Metodo completato correttamente.
MK_E_EXCEEDEDDEADLINE
Impossibile completare l'operazione di associazione entro il limite di tempo specificato dalla struttura di BIND_OPTS del contesto di associazione.
MK_E_CONNECTMANUALLY
L'operazione non è riuscita a connettersi all'archiviazione per questo oggetto, probabilmente perché non è stato possibile connettersi a un dispositivo di rete. Per altre informazioni, vedere IMoniker::BindToObject.
MK_E_UNAVAILABLE
L'ora della modifica non è disponibile e non sarà disponibile indipendentemente dalla scadenza utilizzata.

Commenti

Per essere precisi, l'ora restituita è la prima volta che COM può identificare dopo il quale non è stata apportata alcuna modifica, quindi questa volta può essere successiva all'ora dell'ultima modifica all'oggetto.

Note ai chiamanti

Se si memorizzano nella cache le informazioni restituite dall'oggetto identificato dal moniker, è possibile assicurarsi che le informazioni siano aggiornate. A tale scopo, chiamare GetTimeOfLastChange e confrontare l'ora restituita con l'ora dell'ultimo recupero delle informazioni dall'oggetto.

Per i moniker archiviati all'interno di oggetti collegati, GetTimeOfLastChange viene chiamato principalmente dall'implementazione del gestore predefinito di IOleObject::IsUpToDate. Le applicazioni contenitore chiamano IOleObject::IsUpToDate per determinare se un oggetto collegato (o un oggetto incorporato contenente oggetti collegati) è aggiornato senza associarsi effettivamente all'oggetto. Ciò consente a un'applicazione di determinare rapidamente quali oggetti collegati richiedono l'aggiornamento quando l'utente finale apre un documento. L'applicazione può quindi associare solo gli oggetti collegati che devono essere aggiornati (dopo aver richiesto all'utente finale di determinare se devono essere aggiornati) anziché associare ogni oggetto collegato nel documento.

Note per gli implementatori

È importante eseguire rapidamente questa operazione perché, per gli oggetti collegati, questo metodo viene chiamato quando un utente apre per la prima volta un documento composto. Di conseguenza, l'implementazione di GetTimeOfLastChange non deve essere associata ad alcun oggetto. Inoltre, l'implementazione deve controllare il parametro di scadenza nel contesto di associazione e restituire MK_E_EXCEEDEDDEADLINE se l'operazione non può essere completata entro l'ora specificata.

Di seguito sono riportate alcune strategie che è possibile usare nelle implementazioni:

  • Per molti tipi di moniker, il parametro pmkToLeft identifica il contenitore dell'oggetto identificato da questo moniker. Se questo è vero della classe moniker, è sufficiente chiamare GetTimeOfLastChange nel parametro pmkToLeft , perché un oggetto non può essere stato modificato in una data successiva al relativo contenitore.
  • È possibile ottenere un puntatore alla tabella di oggetti in esecuzione (ROT) chiamando IBindCtx::GetRunningObjectTable sul parametro pbc e quindi chiamando IRunningObjectTable::GetTimeOfLastChange, perché il ROT registra in genere l'ora dell'ultima modifica.
  • È possibile ottenere l'archiviazione associata a questo moniker (o al moniker pmkToLeft ) e restituire l'ora dell'ultima modifica dell'archiviazione con una chiamata a IStorage::Stat.

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Questo metodo restituisce E_NOTIMPL.
Moniker di classe Questo metodo restituisce MK_E_UNAVAILABLE.
Moniker file Se questo moniker si trova nel ROT, questo metodo restituisce l'ora dell'ultima modifica registrata; in caso contrario, restituisce l'ora dell'ultima scrittura per il file. Se non è possibile trovare il file, questo metodo restituisce MK_E_NOOBJECT.
Moniker composito generico Questo metodo crea un composito di pmkToLeft (se non NULL) e questo moniker e usa il rot per recuperare l'ora dell'ultima modifica. Se l'oggetto non si trova nel rot, il metodo chiama in modo ricorsivo GetTimeOfLastChange sul componente più a destra del composito, passando il resto del composito come parametro pmkToLeft per tale chiamata.
Moniker elemento Se pmkToLeft è NULL, questo metodo restituisce MK_E_NOTBINDABLE. In caso contrario, il metodo crea un composito di pmkToLeft e questo moniker e usa rot per accedere all'ora dell'ultima modifica. Se l'oggetto non si trova nel ROT, il metodo chiama GetTimeOfLastChange sul parametro pmkToLeft .
Moniker OBJREF Questo metodo restituisce E_NOTIMPL.
Moniker puntatore Questo metodo restituisce E_NOTIMPL.
Moniker URL Questo metodo restituisce l'ora dell'ultima modifica di un oggetto registrato nel ROT.

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

Vedi anche

Imoniker

IRunningObjectTable::GetTimeOfLastChange