Compartilhar via


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

Determina se o objeto identificado por esse moniker está atualmente carregado e em execução.

Sintaxe

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

Parâmetros

[in] pbc

Um ponteiro para a interface IBindCtx no contexto de associação a ser usado nesta operação de associação. O contexto de associação armazena em cache objetos associados durante o processo de associação, contém parâmetros que se aplicam a todas as operações usando o contexto de associação e fornece os meios pelos quais a implementação do moniker deve recuperar informações sobre seu ambiente.

[in] pmkToLeft

Um ponteiro para a interface IMoniker no moniker à esquerda deste moniker se esse moniker fizer parte de uma composição. Esse parâmetro é usado principalmente por implementadores de moniker para habilitar a cooperação entre os vários componentes de um moniker composto; Os clientes moniker geralmente podem passar NULL.

[in] pmkNewlyRunning

Um ponteiro para a interface IMoniker no moniker adicionado mais recentemente à ROT (tabela de objetos em execução). Isso pode ser NULL. Se não for NULL, a implementação poderá retornar os resultados da chamada de IMoniker::IsEqual no parâmetro pmkNewlyRunning , passando o moniker atual. Esse parâmetro destina-se a habilitar implementações IsRunning mais eficientes do que apenas pesquisar a ROT, mas a implementação pode optar por ignorar pmkNewlyRunning sem causar nenhum dano.

Retornar valor

Esse método pode retornar os valores de retorno padrão E_UNEXPECTED, bem como os valores a seguir.

Código de retorno Descrição
S_OK
O moniker está em execução.
S_FALSE
O moniker não está em execução.

Comentários

Anotações para chamadores

Se a velocidade for importante quando você estiver solicitando serviços do objeto identificado pelo moniker, talvez você queira esses serviços somente se o objeto já estiver em execução (porque carregar um objeto no estado em execução pode ser demorado). Nessa situação, você deve chamar IsRunning para determinar se o objeto está em execução.

Para os monikers armazenados em objetos vinculados, IsRunning é chamado principalmente pela implementação do manipulador padrão de IOleLink::BindIfRunning.

Anotações aos implementadores

Para obter um ponteiro para o ROT, sua implementação deve chamar IBindCtx::GetRunningObjectTable no parâmetro pbc . Sua implementação pode chamar IRunningObjectTable::IsRunning para determinar se o objeto identificado pelo moniker está em execução. O objeto identificado pelo moniker deve ter se registrado com o ROT quando começou a ser executado.

Notas específicas da implementação

Implementação Observações
Anti-moniker Esse método verifica o ROT para ver se o objeto está em execução.
Moniker de classe Esse método retorna E_NOTIMPL.
Moniker de arquivo Se pmkNewlyRunning não for NULL, esse método retornará TRUE se esse moniker for igual a esse moniker. Caso contrário, o método pergunta ao ROT se esse moniker está em execução. O método ignora pmkToLeft.
Moniker composto genérico Se pmkToLeft não for NULL, esse método comporá pmkToLeft com esse moniker e chamará IsRunning no resultado.

Se pmkToLeft for NULL, esse método retornará TRUE se pmkNewlyRunning não for NULL e for igual a esse moniker.

Se pmkToLeft e pmkNewlyRunning forem NULL, esse método verificará a ROT para ver se o moniker está em execução. Nesse caso, o método retorna S_OK; caso contrário, ele chama IsRunning recursivamente no componente mais à direita da composição, passando o restante da composição como o parâmetro pmkToLeft para essa chamada. Isso manipula o caso em que o moniker identifica um pseudo-objeto que não está registrado como em execução; consulte a implementação do moniker de item para obter mais detalhes.

Moniker de item Se pmkToLeft for NULL, esse método retornará TRUE se pmkNewlyRunning não for NULL e for igual a esse moniker. Caso contrário, o método verifica o ROT para ver se esse moniker está em execução.

Se pmkToLeft não for NULL, o método chamará IMoniker::BindToObject no parâmetro pmkToLeft , solicitando um ponteiro de interface IOleItemContainer . Em seguida, o método chama IOleItemContainer::IsRunning, passando a cadeia de caracteres contida nesse moniker.

Moniker OBJREF Como os monikers OBJREF representam uma instância de objeto em execução, esse método retorna TRUE , a menos que o objeto não esteja mais em execução porque uma chamada recente falhou. O método ignora pmkToLeft.
Moniker de ponteiro Esse método sempre retorna S_OK, pois o objeto identificado por um moniker de ponteiro sempre deve estar em execução.
Moniker de URL Retornará S_OK se esse moniker estiver em execução no momento. Caso contrário, ele retornará S_FALSE. O moniker de URL determina se ele está em execução primeiro verificando se ele é igual ao moniker recém-executado, fazendo a seguinte chamada: pmkNewlyRunning-IsEqual>. Normalmente, essa chamada é uma operação barata. Se isso não for bem-sucedido, o moniker verificará se ele está registrado com a ROT do contexto de associação passada.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho objidl.h

Confira também

Imoniker

IOleLink::BindIfRunning

IRunningObjectTable::IsRunning