计算接口或委托类型的接口标识符(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 |
|---|---|
|
调用成功。 |
|
内存不足,无法完成任务。 |
|
为参数化类型提供了错误的类型参数数。 |
如果类型不适合显示它的上下文,也可能发生故障。
注解
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 |