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*

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 함수는 심층 의미 체계 분석을 수행하지 않습니다. instance 경우 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