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 |
---|---|
|
호출이 성공했습니다. |
|
작업을 완료하는 데 사용할 수 있는 메모리가 부족합니다. |
|
매개 변수가 있는 형식에 대해 잘못된 수의 형식 인수가 제공됩니다. |
형식이 표시되는 컨텍스트에 적합하지 않은 경우에도 오류가 발생할 수 있습니다.
설명
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 |