Share via


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

Determina si el objeto identificado por este moniker está cargado y en ejecución.

Sintaxis

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

Parámetros

[in] pbc

Puntero a la interfaz IBindCtx en el contexto de enlace que se va a usar en esta operación de enlace. El contexto de enlace almacena en caché los objetos enlazados durante el proceso de enlace, contiene parámetros que se aplican a todas las operaciones mediante el contexto de enlace y proporciona los medios por los que la implementación del moniker debe recuperar información sobre su entorno.

[in] pmkToLeft

Puntero a la interfaz IMoniker del moniker a la izquierda de este moniker si este moniker forma parte de un compuesto. Este parámetro se usa principalmente por los implementadores de moniker para permitir la cooperación entre los distintos componentes de un moniker compuesto; Normalmente, los clientes de moniker pueden pasar NULL.

[in] pmkNewlyRunning

Puntero a la interfaz IMoniker del moniker agregado más recientemente a la tabla de objetos en ejecución (ROT). Puede ser NULL. Si no es NULL, la implementación puede devolver los resultados de llamar a IMoniker::IsEqual en el parámetro pmkNewlyRunning , pasando el moniker actual. Este parámetro está pensado para habilitar implementaciones de IsRunning que son más eficaces que simplemente buscar en rot, pero la implementación puede optar por omitir pmkNewlyRunning sin causar ningún daño.

Valor devuelto

Este método puede devolver los valores devueltos estándar E_UNEXPECTED, así como los siguientes valores.

Código devuelto Descripción
S_OK
El moniker se está ejecutando.
S_FALSE
El moniker no se está ejecutando.

Comentarios

Notas a los autores de llamadas

Si la velocidad es importante al solicitar servicios desde el objeto identificado por el moniker, es posible que desee que esos servicios solo estén en ejecución si el objeto ya se está ejecutando (porque cargar un objeto en el estado en ejecución puede llevar mucho tiempo). En esta situación, debe llamar a IsRunning para determinar si el objeto se está ejecutando.

Para los monikers almacenados en objetos vinculados, IsRunning se llama principalmente por la implementación del controlador predeterminado de IOleLink::BindIfRunning.

Notas para los implementadores

Para obtener un puntero a ROT, la implementación debe llamar a IBindCtx::GetRunningObjectTable en el parámetro pbc . A continuación, la implementación puede llamar a IRunningObjectTable::IsRunning para determinar si el objeto identificado por el moniker se está ejecutando. El objeto identificado por el moniker debe haberse registrado en el ROT cuando comenzó a ejecutarse por primera vez.

Notas específicas de la implementación

Implementación Notas
Anti-moniker Este método comprueba el ROT para ver si el objeto se está ejecutando.
Moniker de clase Este método devuelve E_NOTIMPL.
Moniker de archivo Si pmkNewlyRunning no es NULL, este método devuelve TRUE si ese moniker es igual a este moniker. De lo contrario, el método pregunta al ROT si se está ejecutando este moniker. El método omite pmkToLeft.
Moniker compuesto genérico Si pmkToLeft no es NULL, este método compone pmkToLeft con este moniker y llama a IsRunning en el resultado.

Si pmkToLeft es NULL, este método devuelve TRUE si pmkNewlyRunning no es NULL y es igual a este moniker.

Si pmkToLeft y pmkNewlyRunning son NULL, este método comprueba el ROT para ver si el moniker se está ejecutando. Si es así, el método devuelve S_OK; de lo contrario, llama recursivamente a IsRunning en el componente más a la derecha de la composición, pasando el resto del compuesto como el parámetro pmkToLeft para esa llamada. Esto controla el caso en el que el moniker identifica un pseudoobjeto que no está registrado como en ejecución; consulte la implementación del moniker de elemento para obtener más detalles.

Moniker de elemento Si pmkToLeft es NULL, este método devuelve TRUE si pmkNewlyRunning no es NULL y es igual a este moniker. De lo contrario, el método comprueba el ROT para ver si se está ejecutando este moniker.

Si pmkToLeft no es NULL, el método llama a IMoniker::BindToObject en el parámetro pmkToLeft y solicita un puntero de interfaz IOleItemContainer . A continuación, el método llama a IOleItemContainer::IsRunning, pasando la cadena contenida en este moniker.

OBJREF moniker Dado que los monikers de OBJREF representan una instancia de objeto en ejecución, este método devuelve TRUE a menos que se sepa que el objeto ya no se está ejecutando porque se produjo un error en una llamada reciente. El método omite pmkToLeft.
Moniker de puntero Este método siempre devuelve S_OK, ya que el objeto identificado por un moniker de puntero siempre debe estar en ejecución.
Moniker de dirección URL Devuelve S_OK si este moniker se está ejecutando actualmente. De lo contrario, devuelve S_FALSE. El moniker de dirección URL determina si se está ejecutando primero comprobando si es igual al moniker recién en ejecución, realizando la siguiente llamada: pmkNewlyRunning-IsEqual>. Normalmente, esta llamada es una operación económica. Si esto no se realiza correctamente, el moniker siguiente comprueba si está registrado con el ROT del contexto de enlace pasado.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado objidl.h

Consulte también

Imoniker

IOleLink::BindIfRunning

IRunningObjectTable::IsRunning