RoGetParameterizedTypeInstanceIID 函数 (roparameterizediid.h)
计算接口标识符 (接口或委托类型的 IID) ,当参数化接口或委托使用指定的类型参数实例化时得到。
语法
HRESULT RoGetParameterizedTypeInstanceIID(
UINT32 nameElementCount,
[in] PCWSTR *nameElements,
[in] const IRoMetaDataLocator & metaDataLocator,
[out] GUID *iid,
[out, optional] ROPARAMIIDHANDLE *pExtra
);
参数
nameElementCount
类型: UINT32
nameElements 中的元素数。
[in] nameElements
类型: PCWSTR*
已分析Windows 运行时类型名称,由 RoParseTypeName 函数返回。 例如,“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
返回代码 | 说明 |
---|---|
|
调用成功。 |
|
可用内存不足,无法完成任务。 |
|
为参数化类型提供了错误数量的类型参数。 |
如果类型不适合其出现的上下文,也可能发生失败。
注解
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);
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2012 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | roparameterizediid.h |
DLL | Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll |