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

Récupère l’heure à laquelle l’objet identifié par ce moniker a été modifié pour la dernière fois.

Syntaxe

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

Paramètres

[in] pbc

Pointeur vers le contexte de liaison à utiliser dans cette opération de liaison. Le contexte de liaison met en cache les objets liés pendant le processus de liaison, contient des paramètres qui s’appliquent à toutes les opérations utilisant le contexte de liaison et fournit les moyens par lesquels l’implémentation du moniker doit récupérer des informations sur son environnement. Pour plus d’informations, consultez IBindCtx.

[in] pmkToLeft

Si le moniker fait partie d’un moniker composite, pointez vers le moniker à gauche de ce moniker. Ce paramètre est principalement utilisé par les implémenteurs moniker pour permettre la coopération entre les différents composants d’un moniker composite. Les clients Moniker doivent passer null.

[out] pFileTime

Pointeur vers la structure FILETIME qui reçoit l’heure de la dernière modification. La valeur {0xFFFFFFFF,0x7FFFFFFF} indique une erreur (par exemple, limite de temps dépassée, informations non disponibles).

Valeur retournée

Cette méthode peut retourner les valeurs de retour standard E_OUTOFMEMORY, ainsi que les valeurs suivantes.

Code de retour Description
S_OK
La commande s'est correctement terminée.
MK_E_EXCEEDEDDEADLINE
L’opération de liaison n’a pas pu être effectuée dans le délai spécifié par la structure BIND_OPTS du contexte de liaison.
MK_E_CONNECTMANUALLY
L’opération n’a pas pu se connecter au stockage de cet objet, peut-être parce qu’un périphérique réseau n’a pas pu être connecté. Pour plus d’informations, consultez IMoniker ::BindToObject.
MK_E_UNAVAILABLE
L’heure de la modification n’est pas disponible et n’est pas disponible quelle que soit l’échéance utilisée.

Remarques

Pour être précis, l’heure retournée est l’heure la plus ancienne à laquelle COM peut identifier après laquelle aucune modification n’a eu lieu. Cette heure peut donc être postérieure à l’heure de la dernière modification apportée à l’objet.

Remarques aux appelants

Si vous mettant en cache les informations retournées par l’objet identifié par le moniker, vous pouvez vous assurer que vos informations sont à jour. Pour ce faire, vous devez appeler GetTimeOfLastChange et comparer l’heure retournée avec l’heure à laquelle vous avez récupéré les informations de l’objet pour la dernière fois.

Pour les monikers stockés dans des objets liés, GetTimeOfLastChange est principalement appelé par l’implémentation par défaut du gestionnaire de IOleObject ::IsUpToDate. Les applications conteneur appellent IOleObject ::IsUpToDate pour déterminer si un objet lié (ou un objet incorporé contenant des objets liés) est à jour sans être réellement lié à l’objet. Cela permet à une application de déterminer rapidement quels objets liés doivent être mis à jour lorsque l’utilisateur final ouvre un document. L’application peut ensuite lier uniquement les objets liés qui doivent être mis à jour (après avoir invité l’utilisateur final à déterminer s’ils doivent être mis à jour) au lieu de lier chaque objet lié dans le document.

Remarques aux implémenteurs

Il est important d’effectuer cette opération rapidement, car, pour les objets liés, cette méthode est appelée lorsqu’un utilisateur ouvre pour la première fois un document composé. Par conséquent, votre implémentation GetTimeOfLastChange ne doit pas être liée à des objets. En outre, votre implémentation doit case activée le paramètre d’échéance dans le contexte de liaison et retourner MK_E_EXCEEDEDDEADLINE si l’opération ne peut pas être terminée à l’heure spécifiée.

Voici quelques stratégies que vous pouvez utiliser dans vos implémentations :

  • Pour de nombreux types de monikers, le paramètre pmkToLeft identifie le conteneur de l’objet identifié par ce moniker. Si cela est vrai pour votre classe moniker, vous pouvez simplement appeler GetTimeOfLastChange sur le paramètre pmkToLeft , car un objet ne peut pas avoir changé à une date ultérieure à son conteneur.
  • Vous pouvez obtenir un pointeur vers la table d’objets en cours d’exécution (ROT) en appelant IBindCtx ::GetRunningObjectTable sur le paramètre pbc , puis en appelant IRunningObjectTable ::GetTimeOfLastChange, car le ROT enregistre généralement l’heure de la dernière modification.
  • Vous pouvez obtenir le stockage associé à ce moniker (ou le moniker pmkToLeft ) et retourner l’heure de la dernière modification du stockage avec un appel à IStorage ::Stat.

Notes spécifiques à l’implémentation

Implémentation Notes
Anti-moniker Cette méthode retourne E_NOTIMPL.
Moniker de classe Cette méthode retourne MK_E_UNAVAILABLE.
Moniker de fichier Si ce moniker se trouve dans le ROT, cette méthode retourne l’heure de la dernière modification enregistrée ici ; sinon, elle retourne l’heure de la dernière écriture pour le fichier. Si le fichier est introuvable, cette méthode retourne MK_E_NOOBJECT.
Moniker composite générique Cette méthode crée un composite de pmkToLeft (si non NULL) et ce moniker et utilise le ROT pour récupérer l’heure de la dernière modification. Si l’objet n’est pas dans le ROT, la méthode appelle de manière récursive GetTimeOfLastChange sur le composant le plus à droite du composite, en passant le reste du composite en tant que paramètre pmkToLeft pour cet appel.
Moniker d’élément Si pmkToLeft a la valeur NULL, cette méthode retourne MK_E_NOTBINDABLE. Sinon, la méthode crée un composite de pmkToLeft et ce moniker et utilise le ROT pour accéder à l’heure de la dernière modification. Si l’objet n’est pas dans le ROT, la méthode appelle GetTimeOfLastChange sur le paramètre pmkToLeft .
MONIKER OBJREF Cette méthode retourne E_NOTIMPL.
Moniker de pointeur Cette méthode retourne E_NOTIMPL.
Moniker d’URL Cette méthode retourne l’heure de la dernière modification d’un objet inscrit dans le ROT.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête objidl.h

Voir aussi

IMoniker

IRunningObjectTable ::GetTimeOfLastChange