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,以及以下值。
返回代码 | 说明 |
---|---|
|
分析操作已成功完成。 |
|
输入组件的语法错误 (pmkToLeft、此名字对象和 pszDisplayName) 。 例如,如果 pmkToLeft 为非 NULL,则文件名字对象返回此错误;如果 pmkToLeft 为 NULL,则项目名字对象返回此错误。 |
此方法还可以返回与 IMoniker::BindToObject 方法关联的错误。
注解
给调用方的说明
名字对象客户端通常不直接调用 ParseDisplayName 。 相反,当他们想要将显示名称转换为名字对象 (时调用 MkParseDisplayName 函数,例如,在实现容器应用程序的“ 链接 ”对话框时,或实现支持对文档外部对象的引用的宏语言) 。 该函数首先分析显示名称本身的初始部分。然后,它会对刚刚创建的名称对象调用 ParseDisplayName ,传递显示名称的其余部分,并获取新的名字对象作为回报;重复此步骤,直到分析整个显示名称。
实施者说明
如果名字对象类设计为仅指定某些类型的对象,则实现可能能够自行执行此分析。 否则,必须获取由名字对象 (标识的对象的 IParseDisplayName 接口指针,即 pmkToLeft 和此名字对象的组合) ,然后返回调用 IParseDisplayName::P arseDisplayName 的结果。获取 IParseDisplayName 指针的策略不同,如下所示:
- 可以尝试获取对象的 CLSID (,方法是在对象) 上调用 IPersist::GetClassID ,然后调用 CoGetClassObject 函数,请求与该 CLSID 关联的类工厂上的 IParseDisplayName 接口。
- 可以尝试绑定到对象本身以获取 IParseDisplayName 指针。
- 可以尝试绑定到 由 pmkToLeft 标识的对象以获取 IOleItemContainer 指针,然后调用 IOleItemContainer::GetObject 以获取项的 IParseDisplayName 指针。
特定于实现的注释
实现 | 备注 |
---|---|
反名字对象 | 此方法返回E_NOTIMPL。 |
类名字对象 |
此方法通过绑定到 IParseDisplayName 的自身并要求绑定对象将显示名称解析为名字对象来分析显示名称,如下所示。
此方法尝试获取 IParseDisplayName 指针,首先通过绑定到名字对象标识的对象的类工厂,然后绑定到对象本身。 如果其中任一绑定操作成功,则文件名字对象会将显示名称的未分析部分传递给 IParseDisplayName::P arseDisplayName 方法。 如果 pmkToLeft 为非 NULL,此方法将返回MK_E_SYNTAX。 |
文件名字对象 | 此方法尝试获取 IParseDisplayName 指针,首先通过绑定到名字对象标识的对象的类工厂,然后绑定到对象本身。 如果其中任一绑定操作成功,则文件名字对象会将显示名称的未分析部分传递给 IParseDisplayName::P arseDisplayName 方法。 |
泛型复合名字对象 | 此方法以递归方式在复合的最右侧组件上调用 IMoniker::P arseDisplayName ,并将其他所有内容作为该调用的 pmkToLeft 参数传递。 |
项名字对象 | 如果 pmkToLeft 为 NULL,则此方法返回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 |