IMoniker::IsRunning 方法 (objidl.h)

确定此名字对象标识的对象当前是否已加载并正在运行。

语法

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

参数

[in] pbc

指向要在此绑定操作中使用的绑定上下文上的 IBindCtx 接口的指针。 绑定上下文缓存绑定过程中绑定的对象,包含应用于使用绑定上下文的所有操作的参数,并提供名字对象实现应检索有关其环境的信息的方法。

[in] pmkToLeft

如果此名字对象是复合对象的一部分,则为指向此名字对象左侧的 IMoniker 接口的指针。 此参数主要由名字对象实现者用来启用复合名字对象的各个组件之间的协作;名字对象客户端通常可以传递 NULL

[in] pmkNewlyRunning

指向最近添加到正在运行的对象表中的名字对象上的 IMoniker 接口的指针, (ROT) 。 这可以为 NULL。 如果不是 NULL,则实现可以返回对 pmkNewlyRunning 参数调用 IMoniker::IsEqual 的结果,并传递当前名字对象。 此参数旨在启用比搜索 ROT 更高效的 IsRunning 实现,但实现可以选择忽略 pmkNewlyRunning 而不会造成任何损害。

返回值

此方法可以返回E_UNEXPECTED的标准返回值,以及以下值。

返回代码 说明
S_OK
名字对象正在运行。
S_FALSE
名字对象未运行。

注解

调用方备注

如果从名字对象标识的对象请求服务时速度很重要,则仅当对象已运行 (时才需要这些服务,因为将对象加载到运行状态) 可能很耗时。 在这种情况下,应调用 IsRunning 以确定对象是否正在运行。

对于存储在链接对象中的名字对象, IsRunning 主要由默认处理程序的 IOleLink::BindIfRunning 实现调用。

实施者说明

若要获取指向 ROT 的指针,实现应对中国人民银行参数调用 IBindCtx::GetRunningObjectTable。 然后,实现可以调用 IRunningObjectTable::IsRunning ,以确定由名字对象标识的对象是否正在运行。 名字对象标识的对象必须在它首次开始运行时向 ROT 注册自身。

特定于实现的说明

实现 备注
反名字对象 此方法检查 ROT 以查看对象是否正在运行。
类名字对象 此方法返回E_NOTIMPL。
文件名字对象 如果 pmkNewlyRunning 为非 NULL,则此方法返回 TRUE (如果该名字对象等于此名字对象)。 否则, 方法会询问 ROT 此名字对象是否正在运行。 方法忽略 pmkToLeft
泛型复合名字对象 如果 pmkToLeft 为非 NULL,则此方法将使用此名字对象组成 pmkToLeft ,并针对结果调用 IsRunning

如果 pmkToLeftNULL,则如果 pmkNewlyRunning 为非 NULL 且等于此名字对象,则此方法返回 TRUE

如果 pmkToLeftpmkNewlyRunning 均为 NULL,则此方法检查 ROT 以查看名字对象是否正在运行。 如果是,该方法返回S_OK;否则,它会以递归方式在复合的最右侧组件上调用 IsRunning ,将复合的其余部分作为该调用的 pmkToLeft 参数传递。 这将处理名字对象标识未注册为正在运行的伪对象的情况;有关更多详细信息,请参阅项名字对象实现。

项名字对象 如果 pmkToLeft 为 NULL,则如果 pmkNewlyRunning 为非 NULL 且等于此名字对象,则此方法返回 TRUE。 否则, 方法检查 ROT 以查看此名字对象是否正在运行。

如果 pmkToLeft 为非 NULL,该方法对 pmkToLeft 参数调用 IMoniker::BindToObject,请求 IOleItemContainer 接口指针。 然后, 方法调用 IOleItemContainer::IsRunning,传递此名字对象中包含的字符串。

OBJREF 名字对象 由于 OBJREF 名字对象表示正在运行的对象实例,因此此方法返回 TRUE ,除非已知该对象因最近的调用失败而不再运行。 方法忽略 pmkToLeft
指针名字对象 此方法始终返回S_OK,因为指针名字对象标识的对象必须始终在运行。
URL 名字对象 如果此名字对象当前正在运行,则返回S_OK。 否则,返回 S_FALSE。 URL 名字对象通过进行以下调用,首先检查它是否等于新运行的名字对象来确定它是否正在运行:pmkNewlyRunning-IsEqual>。 通常,此调用是一种成本低廉的操作。 如果此操作不成功,则名字对象接下来会检查它是否已注册到传入绑定上下文的 ROT 中。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

IMoniker

IOleLink::BindIfRunning

IRunningObjectTable::IsRunning