Condividi tramite


Metodo IMoniker::IsRunning (objidl.h)

Determina se l'oggetto identificato da questo moniker è attualmente caricato ed in esecuzione.

Sintassi

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

Parametri

[in] pbc

Puntatore all'interfaccia IBindCtx nel contesto di associazione da usare 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 usando il contesto di associazione e fornisce i mezzi in base al quale l'implementazione del moniker deve recuperare informazioni sull'ambiente.

[in] pmkToLeft

Puntatore all'interfaccia IMoniker sul moniker a sinistra di questo moniker se questo moniker fa parte di un moniker composito. Questo parametro viene usato principalmente dagli implementatori moniker per consentire la cooperazione tra i vari componenti di un moniker composito; i client moniker possono in genere passare NULL.

[in] pmkNewlyRunning

Puntatore all'interfaccia IMoniker nel moniker aggiunto più di recente alla tabella degli oggetti in esecuzione (ROT). Questo può essere NULL. Se non null, l'implementazione può restituire i risultati della chiamata a IMoniker::IsEqual nel parametro pmkNewlyRunning , passando il moniker corrente. Questo parametro è destinato a abilitare le implementazioni di IsRunning che sono più efficienti di una semplice ricerca del ROT, ma l'implementazione può scegliere di ignorare pmkNewlyRunning senza causare alcun danno.

Valore restituito

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

Codice restituito Descrizione
S_OK
Il moniker è in esecuzione.
S_FALSE
Il moniker non è in esecuzione.

Commenti

Note ai chiamanti

Se la velocità è importante quando si richiedono servizi dall'oggetto identificato dal moniker, è possibile che tali servizi vengano eseguiti solo se l'oggetto è già in esecuzione (perché il caricamento di un oggetto nello stato in esecuzione potrebbe richiedere tempo). In tale situazione, è necessario chiamare IsRunning per determinare se l'oggetto è in esecuzione.

Per i monikers archiviati all'interno di oggetti collegati, IsRunning viene chiamato principalmente dall'implementazione del gestore predefinito di IOleLink::BindIfRunning.

Note per gli implementatori

Per ottenere un puntatore al ROT, l'implementazione deve chiamare IBindCtx::GetRunningObjectTable nel parametro pbc . L'implementazione può quindi chiamare IRunningObjectTable::IsRunning per determinare se l'oggetto identificato dal moniker è in esecuzione. L'oggetto identificato dal moniker deve avere registrato se stesso con il ROT quando ha iniziato prima l'esecuzione.

Note specifiche dell'implementazione

Implementazione Note
Anti-moniker Questo metodo controlla il ROT per verificare se l'oggetto è in esecuzione.
Moniker classe Questo metodo restituisce E_NOTIMPL.
Moniker file Se pmkNewlyRunning non è NULL, questo metodo restituisce TRUE se tale moniker è uguale a questo moniker. In caso contrario, il metodo chiede al rot se questo moniker è in esecuzione. Il metodo ignora pmkToLeft.
Moniker composito generico Se pmkToLeft non è NULL, questo metodo compone pmkToLeft con questo moniker e chiama IsRunning nel risultato.

Se pmkToLeft è NULL, questo metodo restituisce TRUE se pmkNewlyRunning non è NULL ed è uguale a questo moniker.

Se pmkToLeft e pmkNewlyRunning sono entrambi NULL, questo metodo controlla il rot per verificare se il moniker è in esecuzione. In tal caso, il metodo restituisce S_OK; in caso contrario, chiama in modo ricorsivo IsRunning nel componente più a destra del composito, passando il resto del composito come parametro pmkToLeft per tale chiamata. Questo gestisce il caso in cui il moniker identifica uno pseudo-oggetto che non è registrato come in esecuzione; per altre informazioni, vedere l'implementazione del moniker dell'elemento.

Moniker elemento Se pmkToLeft è NULL, questo metodo restituisce TRUE se pmkNewlyRunning non è NULL ed è uguale a questo moniker. In caso contrario, il metodo controlla il rot per verificare se questo moniker è in esecuzione.

Se pmkToLeft non è NULL, il metodo chiama IMoniker::BindToObject nel parametro pmkToLeft , richiedendo un puntatore dell'interfaccia IOleItemContainer . Il metodo chiama quindi IOleItemContainer::IsRunning, passando la stringa contenuta all'interno di questo moniker.

Moniker OBJREF Poiché i moniker OBJREF rappresentano un'istanza dell'oggetto in esecuzione, questo metodo restituisce TRUE a meno che l'oggetto non sia più in esecuzione perché una chiamata recente non è riuscita. Il metodo ignora pmkToLeft.
Moniker puntatore Questo metodo restituisce sempre S_OK, perché l'oggetto identificato da un moniker puntatore deve essere sempre in esecuzione.
Moniker URL Restituisce S_OK se questo moniker è attualmente in esecuzione. In caso contrario, restituisce S_FALSE. Il moniker URL determina se è in esecuzione controllando prima se è uguale al moniker appena in esecuzione, eseguendo la chiamata seguente: pmkNewlyRunning-IsEqual>. In genere, questa chiamata è un'operazione economica. Se questa operazione non riesce, il moniker verifica successivamente se è registrato con rot del contesto di associazione passato.

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

IOleLink::BindIfRunning

IRunningObjectTable::IsRunning