RoGetParameterizedTypeInstanceIID 函数(roparameterizediid.h)

计算接口或委托类型的接口标识符(IID),当参数化接口或委托使用指定的类型参数实例化时产生的接口标识符。

Syntax

HRESULT RoGetParameterizedTypeInstanceIID(
                  UINT32                     nameElementCount,
  [in]            PCWSTR                     *nameElements,
  [in]            const IRoMetaDataLocator & metaDataLocator,
  [out]           GUID                       *iid,
  [out, optional] ROPARAMIIDHANDLE           *pExtra
);

参数

nameElementCount

类型:UINT32

nameElements 中的元素数。

[in] nameElements

类型:PCWSTR*

RoParseTypeName 函数返回的已分析 Windows 运行时类型名称。 例如,“Windows.Foundation.Collections.IVector'1”和“N1”。N2.IFoo”。

[in] metaDataLocator

类型: const IRoMetaDataLocator

用于解析元数据的回调。

实现应使用 RoGetMetaDataFile 函数来发现必要的元数据(.winmd)文件,并检查元数据以确定必要的类型信息。 由于 RoGetMetaDataFile 函数不缓存结果,因此定位符应根据所实现的编程模型缓存结果。

[out] iid

类型: GUID*

nameElements 对应的接口或委托的 IID。

[out, optional] pExtra

类型: ROPARAMIIDHANDLE*

对应于 nameElements 的 IID 的句柄。

返回值

类型:HRESULT

返回代码 Description
S_OK
调用成功。
E_OUTOFMEMORY
内存不足,无法完成任务。
E_INVALIDARG
为参数化类型提供了错误的类型参数数。
 

如果类型不适合显示它的上下文,也可能发生故障。

注解

RoGetParameterizedTypeInstanceIID 函数供编程语言实现者使用。

此函数是无状态的。 metaDataLocator 参数在调用之间不保留,在调用返回后可能会立即释放。

RoGetParameterizedTypeInstanceIID 函数不执行深度语义分析。 例如,如果 IRoSimpleMetaDataBuilder 指定结构包含接口指针,则此函数将返回成功,即使此类元数据在语义上无效。 在这种情况下,未指定返回的 IID 的值。

此函数可以递归调用作为参数提供的元数据定位符。

如果对 IRoSimpleMetaDataBuilder 函数的调用失败,此函数将返回该失败代码。

例子


#include <stdlib.h>
#include <windows.h>
#include <winrt/paraminstanceapi.h>

HRESULT ExampleMetadataLocator(
    PCWSTR name, 
    IRoSimpleMetaDataBuilder& builder)
{
    if (wcscmp(L"Example.IParam`1", name) == 0)
    {
        GUID piidParam= { /* 22046e87-28b5-4c53-9804-bc69f6ee0299 */
            0x22046e87,
            0x28b5,
            0x4c53,
            {0x98, 0x04, 0xbc, 0x69, 0xf6, 0xee, 0x02, 0x99}
        };
        builder.SetParameterizedInterface(piidParam, 1);
    }
    else if (wcscmp(L"Example.InterfaceGroup", name) == 0)
    {
        builder.SetInterfaceGroupSimpleDefault(name, L"Example.IFoo", nullptr);
    }
    else if (wcscmp(L"Example.IFoo", name) == 0)
    {
        GUID iidFoo = { /* f7f968c2-b1d8-47e0-98db-1b04f2bba657 */
            0xf7f968c2,
            0xb1d8,
            0x47e0,
            {0x98, 0xdb, 0x1b, 0x04, 0xf2, 0xbb, 0xa6, 0x57}
        };
        builder.SetWinRtInterface(iidFoo);
    }
    return E_ABORT;
}

int main()
{
    // example, compute IID
    GUID iidResult;
    PCWSTR names = { L"Example.IParam`1", L"Example.InterfaceGroup" };
    HRESULT hr = RoGetParameterizedTypeInstanceIID(
        2,
        names,
        Ro::Locator(&ExampleMetadataLocator),
        &iidResult);
}


要求

Requirement 价值
最低支持的客户端 Windows 8 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows操作系统
Header roparameterizediid.h
Library OneCore.Lib
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll