MkParseDisplayName 函数 (objbase.h)

将字符串转换为标识由字符串命名的对象的名称对象。

此函数是 IMoniker::GetDisplayName 操作的反函数,该操作检索与名字对象关联的显示名称。

语法

HRESULT MkParseDisplayName(
  [in]  LPBC      pbc,
  [in]  LPCOLESTR szUserName,
  [out] ULONG     *pchEaten,
  [out] LPMONIKER *ppmk
);

参数

[in] pbc

指向要在此绑定操作中使用的绑定上下文对象上的 IBindCtx 接口的指针。

[in] szUserName

指向要分析的显示名称的指针。

[out] pchEaten

指向已使用的 szUserName 字符数的指针。 如果函数成功,*pchEatenszUserName 的长度;否则,它是成功分析的字符数。

[out] ppmk

接收从 szUserName 生成的名字对象的接口指针的 IMoniker* 指针变量的地址。 成功后,函数在名字对象上调用 了 AddRef ,调用方负责调用 Release。 如果发生错误,指定的接口指针将包含方法在错误发生之前能够创建的名称对象。

返回值

此函数可以返回E_OUTOFMEMORY的标准返回值,以及以下值。

返回代码 说明
S_OK
分析操作成功,并且名字对象已创建。
MK_E_SYNTAX
文件名的语法错误或生成的复合名字对象的语法错误。
 

此函数还可以返回 IMoniker::BindToObjectIOleItemContainer::GetObjectIParseDisplayName::P arseDisplayName 返回的任何错误值。

注解

MkParseDisplayName 函数将人类可读的名称解析为可用于标识链接源的名称对象。 生成的名字对象可以是简单的名字对象 (如文件名字对象) ,也可以是由组件名字对象部分组成的泛型组合。 例如,显示名称“c:\mydir\somefile!item 1”

可以解析为以下泛型复合名字对象:基于“c:\mydir\somefile”的 FileMoniker ) + (ItemMoniker 基于“item 1”) 。

MkParseDisplayName 的最常见用途是在标准链接对话框的实现中,该对话框允许最终用户通过键入字符串来指定链接对象的源。 如果应用程序支持允许远程引用 (引用文档) 外部元素的宏语言,则你可能还需要调用 MkParseDisplayName

分析显示名称通常需要激活绑定操作期间将激活的相同对象,因此在性能) 方面, (成本可能与绑定一样昂贵。 在分析操作期间绑定的对象在传递给函数的绑定上下文中缓存。 如果计划绑定 MkParseDisplayName 返回的名字对象,最好在函数返回后立即绑定,使用相同的绑定上下文,这样就无需再次激活对象。

MkParseDisplayName 分析其理解为名字对象的显示名称。 然后,该函数对新创建的名字对象调用 IMoniker::P arseDisplayName ,传递显示名称的其余部分。 ParseDisplayName 返回的名称对象将组合到现有名字对象的末尾,如果任何显示名称保持未分析状态,则对组合结果调用 ParseDisplayName。 此过程将重复,直到分析整个显示名称。

MkParseDisplayName 尝试使用第一个成功策略来分析显示名称的开头:

  1. 函数在 Running Object Table 中查找与仅包含有效文件名字符的显示名称的所有前缀对应的文件名字对象。 此策略可以识别尚未保存的文档。
  2. 函数检查仅包含有效文件名字符的显示名称的最大前缀,以查看 OLE 1 文档是否按该名称注册。 在这种情况下,返回的名字对象是由 OLE 2 的 OLE 1 兼容层提供的内部名字对象。
  3. 函数会查询文件系统,以检查显示名称的前缀是否与现有文件匹配。 文件名可以是 drive-absolute、drive-relative、working-directory relative 或以显式网络共享名称开头。 这是常见的情况。
  4. 如果显示名称的初始字符为“@”,则函数会查找紧跟在它后面符合合法 ProgID 语法的最长字符串。 函数使用 CLSIDFromProgID 函数将此字符串转换为 CLSID。 如果 CLSID 表示 OLE 2 类,则函数将加载相应的类对象并请求 IParseDisplayName 接口指针。 然后,为生成的 IParseDisplayName 接口提供要分析的整个字符串,从“@”开始。 如果 CLSID 表示 OLE 1 类,则该函数会将 ProgID 后面的字符串视为具有 文件名| 语法的 OLE1/DDE 链接指示符。

要求

要求
最低受支持的客户端 Windows 2000 专业版 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows 2000 Server [桌面应用 |UWP 应用]
目标平台 Windows
标头 objbase.h
Library Ole32.lib
DLL Ole32.dll
API 集 在 Windows 8.1) 中引入的 ext-ms-win-com-ole32-l1-1-1 (

另请参阅

IMoniker::GetDisplayName

IMoniker::P arseDisplayName

IParseDisplayName