Функция 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

Код возврата Описание
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);
}


Требования

Требование Значение
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header roparameterizediid.h
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll