CreateGenericComposite 函数 (objbase.h)

执行两个名字对象的泛型组合,并提供指向生成的复合名字对象的指针。

语法

HRESULT CreateGenericComposite(
  [in, optional] LPMONIKER pmkFirst,
  [in, optional] LPMONIKER pmkRest,
  [out]          LPMONIKER *ppmkComposite
);

参数

[in, optional] pmkFirst

指向要组合在 pmkRest 指向的名称对象左侧的名字对象的指针。 可以指向任何类型的名字对象,包括泛型复合对象。

[in, optional] pmkRest

指向要组合在 pmkFirst 指向的名称对象右侧的名称对象的指针。 可以指向与 pmkRest 名字对象类型兼容的任何类型的名字对象,包括泛型复合对象。

[out] ppmkComposite

IMoniker* 指针变量的地址,该变量接收复合名字对象(组合 pmkFirstpmkRest 的结果)的接口指针。 此对象支持 IMoniker 的 OLE 复合名字对象实现。 成功后,函数在名字对象上调用 了 AddRef ,调用方负责调用 Release。 如果 pmkFirstpmkRestNULL,则提供的指针为非 NULL 指针。 如果 pmkFirstpmkRest 均为 NULL,或者如果发生错误,则返回的指针为 NULL

返回值

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

返回代码 说明
S_OK
已成功编写输入名字对象。
MK_E_SYNTAX
由于路径 (语法错误,无法组合这两个名字对象,例如,如果 pmkFirst 和 pmkRest 都是基于) 绝对路径的文件名字对象。

注解

CreateGenericComposite 将两个名字对象联接到一个名字对象中。 要联接的名字对象类可能不同,仅受组合规则的约束。 仅当在包含泛型合成功能的 IMoniker::ComposeWith 实现中通过实现 IMoniker 接口编写新的名字对象类时,才调用此函数。

名字对象提供程序应调用 ComposeWith ,将两个名字对象组合在一起。 ComposeWith 的实现应 (,OLE 实现) 尝试先执行非泛型组合(如果类合理),其中将同一类的两个名字对象组合在一起。 如果无法做到这一点,则实现可以调用 CreateGenericComposite 来执行泛型组合,该组合在组合规则内合并了两个不同类的名称对象。 如果编写新的名字对象类,则可以定义新的非泛型组合类型。

在构成这两个名字对象的过程中, CreateGenericComposite 可以简化所有可能。 假设以下示例:pmkFirst 是泛型复合名字对象,A + B + C,pmkRest 是泛型复合名字对象,C -1 + B -1 + Z (其中 C -1 是 C) 的反数。 函数首先编写 C 到 C -1,后者不构成任何内容。 然后,它将 B 和 B -1 组成为无。 最后,它构成 A 到 Z,并提供指向泛型复合名字对象 A + Z 的指针。

要求

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

另请参阅

IMoniker

IMoniker::ComposeWith