IMoniker::P arseDisplayName 方法 (objidl.h)

将显示名称转换为名字对象。

语法

HRESULT ParseDisplayName(
  [in]  IBindCtx *pbc,
  [in]  IMoniker *pmkToLeft,
  [in]  LPOLESTR pszDisplayName,
  [out] ULONG    *pchEaten,
  [out] IMoniker **ppmkOut
);

参数

[in] pbc

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

[in] pmkToLeft

指向名字对象上 IMoniker 接口的指针,该名称已从显示名称生成至今。

[in] pszDisplayName

要分析的剩余显示名称。

[out] pchEaten

指向一个变量的指针,该变量接收 pszDisplayName 中在此步骤中使用的字符数。

[out] ppmkOut

指向 IMoniker 指针变量的指针,该变量接收指向从 pszDisplayName 生成的名字对象的接口指针。 成功后,实现必须在新名字对象上调用 AddRef ;调用方负责调用 Release。 如果发生错误,实现会将 *ppmkOut 设置为 NULL

返回值

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

返回代码 说明
S_OK
分析操作已成功完成。
MK_E_SYNTAX
输入组件的语法错误 (pmkToLeft、此名字对象和 pszDisplayName) 。 例如,如果 pmkToLeft 为非 NULL,则文件名字对象返回此错误;如果 pmkToLeftNULL,则项目名字对象返回此错误。
 

此方法还可以返回与 IMoniker::BindToObject 方法关联的错误。

注解

给调用方的说明

名字对象客户端通常不直接调用 ParseDisplayName 。 相反,当他们想要将显示名称转换为名字对象 (时调用 MkParseDisplayName 函数,例如,在实现容器应用程序的“ 链接 ”对话框时,或实现支持对文档外部对象的引用的宏语言) 。 该函数首先分析显示名称本身的初始部分。

然后,它会对刚刚创建的名称对象调用 ParseDisplayName ,传递显示名称的其余部分,并获取新的名字对象作为回报;重复此步骤,直到分析整个显示名称。

实施者说明

如果名字对象类设计为仅指定某些类型的对象,则实现可能能够自行执行此分析。 否则,必须获取由名字对象 (标识的对象的 IParseDisplayName 接口指针,即 pmkToLeft 和此名字对象的组合) ,然后返回调用 IParseDisplayName::P arseDisplayName 的结果。

获取 IParseDisplayName 指针的策略不同,如下所示:

绑定的任何对象都应注册到绑定上下文 (请参阅 IBindCtx::RegisterObjectBound) ,以确保它们在分析操作期间保持运行状态。

特定于实现的注释

实现 备注
反名字对象 此方法返回E_NOTIMPL。
类名字对象 此方法通过绑定到 IParseDisplayName 的自身并要求绑定对象将显示名称解析为名字对象来分析显示名称,如下所示。
  hr = BindToObject(pbc, pmkToLeft, IID_IParseDisplayName, (void**)&ppdn);
  if (SUCCEEDED(hr)) {
    hr = ppdn->ParseDisplayName(pbc, lpszDisplayName, pchEaten, ppmkOut);
    ppdn->Release();
  }
  return hr;

此方法尝试获取 IParseDisplayName 指针,首先通过绑定到名字对象标识的对象的类工厂,然后绑定到对象本身。 如果其中任一绑定操作成功,则文件名字对象会将显示名称的未分析部分传递给 IParseDisplayName::P arseDisplayName 方法。

如果 pmkToLeft 为非 NULL,此方法将返回MK_E_SYNTAX。

文件名字对象 此方法尝试获取 IParseDisplayName 指针,首先通过绑定到名字对象标识的对象的类工厂,然后绑定到对象本身。 如果其中任一绑定操作成功,则文件名字对象会将显示名称的未分析部分传递给 IParseDisplayName::P arseDisplayName 方法。
泛型复合名字对象 此方法以递归方式在复合的最右侧组件上调用 IMoniker::P arseDisplayName ,并将其他所有内容作为该调用的 pmkToLeft 参数传递。
项名字对象 如果 pmkToLeftNULL,则此方法返回MK_E_SYNTAX。 否则,方法在 pmkToLeft 参数上调用 IMoniker::BindToObject,请求 IOleItemContainer 接口指针。 然后, 方法调用 IOleItemContainer::GetObject,请求指向由名字对象标识的对象的 IParseDisplayName 接口指针,并将显示名称传递给 IParseDisplayName::P arseDisplayName
OBJREF 名字对象 如果 pmkToLeft 不为 NULL,则此方法返回MK_E_SYNTAX。
指针名字对象 此方法查询 IParseDisplayName 接口的包装指针,并将显示名称传递给 IParseDisplayName::P arseDisplayName
URL 名字对象 将完整或部分 URL 字符串分析为结果名字对象 (ppmkOut) 。 如果 szDisplayName 表示完整的 URL 字符串 (例如“http://foo.com/default.html”) ,则结果为新的完整 URL 名字对象。 如果 szDisplayName 表示部分 URL 字符串 (例如“.”。\default.html“) ,结果是一个完整的 URL,该 URL 从绑定上下文的SZ_URLCONTEXT object-parameter 或此 URL 名字对象获取其上下文。 例如,如果上下文名字对象为“”http://foo.com/pub/list.html,而 szDisplayName 为“.”。\default.html“,生成的 URL 名字对象将表示”http://foo.com/default.html”。

要求

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

另请参阅

IMoniker

IParseDisplayName

MkParseDisplayName