Функция 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*
IiD интерфейса или делегата, соответствующего nameElements.
[out, optional] pExtra
Тип: ROPARAMIIDHANDLE*
Обработка для ИИД, соответствующего nameElements.
Возвращаемое значение
Тип: 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 |
Header | roparameterizediid.h |
DLL | Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll |