Partager via


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

Détermine si l’objet identifié par ce moniker est actuellement chargé et en cours d’exécution.

Syntaxe

HRESULT IsRunning(
  [in] IBindCtx *pbc,
  [in] IMoniker *pmkToLeft,
  [in] IMoniker *pmkNewlyRunning
);

Paramètres

[in] pbc

Pointeur vers l’interface IBindCtx sur 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 à l’aide du contexte de liaison et fournit les moyens par lesquels l’implémentation du moniker doit récupérer des informations sur son environnement.

[in] pmkToLeft

Pointeur vers l’interface IMoniker sur le moniker à gauche de ce moniker si ce moniker fait partie d’un composite. 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 peuvent généralement passer la valeur NULL.

[in] pmkNewlyRunning

Pointeur vers l’interface IMoniker sur le moniker récemment ajouté à la table d’objets en cours d’exécution (ROT). Cela peut être NULL. Si elle n’est pas NULL, l’implémentation peut retourner les résultats de l’appel de IMoniker ::IsEqual sur le paramètre pmkNewlyRunning , en passant le moniker actuel. Ce paramètre est destiné à activer les implémentations IsRunning qui sont plus efficaces que la simple recherche dans rot, mais l’implémentation peut choisir d’ignorer pmkNewlyRunning sans causer de dommages.

Valeur retournée

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

Code de retour Description
S_OK
Le moniker est en cours d’exécution.
S_FALSE
Le moniker n’est pas en cours d’exécution.

Remarques

Notes aux appelants

Si la vitesse est importante lorsque vous demandez des services à partir de l’objet identifié par le moniker, vous pouvez souhaiter ces services uniquement si l’objet est déjà en cours d’exécution (car le chargement d’un objet dans l’état en cours d’exécution peut prendre du temps). Dans ce cas, vous devez appeler IsRunning pour déterminer si l’objet est en cours d’exécution.

Pour les monikers stockés dans des objets liés, IsRunning est principalement appelé par l’implémentation par défaut du gestionnaire IOleLink ::BindIfRunning.

Notes aux implémenteurs

Pour obtenir un pointeur vers le ROT, votre implémentation doit appeler IBindCtx ::GetRunningObjectTable sur le paramètre pbc . Votre implémentation peut ensuite appeler IRunningObjectTable ::IsRunning pour déterminer si l’objet identifié par le moniker est en cours d’exécution. L’objet identifié par le moniker doit s’être inscrit auprès du ROT au début de son exécution.

Notes spécifiques à l’implémentation

Implémentation Notes
Anti-moniker Cette méthode vérifie le ROT pour voir si l’objet est en cours d’exécution.
Moniker de classe Cette méthode retourne E_NOTIMPL.
Moniker de fichier Si pmkNewlyRunning n’a pas la valeur NULL, cette méthode retourne TRUE si ce moniker est égal à ce moniker. Sinon, la méthode demande au ROT si ce moniker est en cours d’exécution. La méthode ignore pmkToLeft.
Moniker composite générique Si pmkToLeft n’a pas la valeur NULL, cette méthode compose pmkToLeft avec ce moniker et appelle IsRunning sur le résultat.

Si pmkToLeft a la valeur NULL, cette méthode retourne TRUE si pmkNewlyRunning n’a pas la valeur NULL et est égal à ce moniker.

Si pmkToLeft et pmkNewlyRunning sont tous deux NULL, cette méthode vérifie le ROT pour voir si le moniker est en cours d’exécution. Si c’est le cas, la méthode retourne S_OK ; sinon, il appelle de manière récursive IsRunning sur le composant le plus à droite du composite, en passant le reste du composite en tant que paramètre pmkToLeft pour cet appel. Cela gère le cas où le moniker identifie un pseudo-objet qui n’est pas inscrit comme en cours d’exécution ; pour plus d’informations, consultez l’implémentation du moniker d’élément.

Moniker d’élément Si pmkToLeft a la valeur NULL, cette méthode retourne TRUE si pmkNewlyRunning n’a pas la valeur NULL et est égal à ce moniker. Sinon, la méthode vérifie le ROT pour voir si ce moniker est en cours d’exécution.

Si pmkToLeft n’a pas la valeur NULL, la méthode appelle IMoniker ::BindToObject sur le paramètre pmkToLeft , demandant un pointeur d’interface IOleItemContainer . La méthode appelle ensuite IOleItemContainer ::IsRunning, en passant la chaîne contenue dans ce moniker.

Moniker OBJREF Étant donné que les monikers OBJREF représentent un objet en cours d’exécution instance, cette méthode retourne TRUE, sauf si l’objet n’est plus en cours d’exécution parce qu’un appel récent a échoué. La méthode ignore pmkToLeft.
Moniker de pointeur Cette méthode retourne toujours S_OK, car l’objet identifié par un moniker de pointeur doit toujours être en cours d’exécution.
Moniker d’URL Retourne S_OK si ce moniker est en cours d’exécution. Sinon, elle retourne S_FALSE. Le moniker d’URL détermine s’il est en cours d’exécution en vérifiant d’abord s’il est égal au moniker en cours d’exécution, en effectuant l’appel suivant : pmkNewlyRunning-IsEqual>. En règle générale, cet appel est une opération peu coûteuse. Si cela échoue, le moniker vérifie ensuite s’il est inscrit auprès du ROT du contexte de liaison passé.

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

IOleLink ::BindIfRunning

IRunningObjectTable ::IsRunning