RoParseTypeName 함수(rometadataresolution.h)
매개 변수가 있는 형식의 경우 형식 이름 및 기존 형식 매개 변수를 구문 분석합니다.
구문
HRESULT RoParseTypeName(
[in] HSTRING typeName,
[out] DWORD *partsCount,
HSTRING **typeNameParts
);
매개 변수
[in] typeName
형식: HSTRING
문자열로 인코딩된 형식 이름입니다. typename은 네임스페이스가 아닌 정규화된 형식, 매개 변수가 없는 네임스페이스 정규화된 형식 또는 완전히 인스턴스화된 네임스페이스 정규화된 형식일 수 있습니다.
[out] partsCount
형식: DWORD*
typenameParts 배열의 요소 수입니다.
typeNameParts
형식: HSTRING**
배열의 첫 번째 요소는 지정된 형식이고 나머지 배열 요소는 프리워크 트리 순서의 형식 매개 변수(있는 경우)입니다.
반환 값
형식: HRESULT
이 함수는 이러한 값 중 하나를 반환할 수 있습니다.
반환 코드 | Description |
---|---|
|
구문 분석이 성공했습니다. |
|
typeName 은 포함된 null을 포함하거나 비어 있습니다. |
|
typename 이 잘 구성되지 않았습니다. |
설명
RoParseTypeName 함수는 문자열로 인코딩된 형식 이름을 구문 분석하고 HSTRING 값의 배열을 반환합니다. 배열의 첫 번째 요소는 기본 형식이고 나머지 배열 요소는 사전 순서 트리 순회 순서의 형식 매개 변수(있는 경우)입니다. 구 문 분석이 성공하면 S_OK 반환됩니다.
가능한 다양한 입력 형식 이름의 예는 다음과 같습니다.
-
예제 1(네임스페이스가 아닌 정규화된 형식)
-
입력 형식 이름
문자열
-
출력
Array 요소 0: String
-
입력 형식 이름
-
예제 2(매개 변수가 없는 네임스페이스 정규화된 형식)
-
입력 형식 이름
Windows.Foundation.IExtensionInformation
-
출력
Array 요소 0: Windows.Foundation.IExtensionInformation
-
입력 형식 이름
-
예제 3(인스턴스화된 매개 변수화된 인터페이스 형식)
-
입력 형식 이름
Windows.Foundation.Collections.IIterator
1<Windows.Foundation.Collections.IMapView
2<Windows.Foundation.Collections.IVector'1<String>, String>> -
출력
Array 요소 0: Windows.Foundation.Collections.IIterator'1
배열 요소 1: Windows.Foundation.Collections.IMapView'2
배열 요소 2: Windows.Foundation.Collections.IVector'1
Array 요소 3: String
Array 요소 4: String
-
입력 형식 이름
입력 문자열은 비어 있지 않아야 하며 포함된 null 문자를 포함하지 않아야 합니다. 그렇지 않으면 E_INVALIDARG API가 실패합니다. 형식 이름이 IVector'1<과 같이 잘못된 형식이면 RO_E_METADATA_INVALID_TYPE_FORMAT 오류 코드로 API가 실패합니다.
RoParseTypeName 함수는 구문이 아닌 typename 형식의 유효성만 검사합니다. 예를 들어 함수는 네임스페이스 정규화된 매개 변수화된 인터페이스 typename이 다음 표에 표시된 형식을 따르는지 확인하지만 , 또는 > 문자를 포함하지 <않아야 한다는 점을 제외하고는 형식 이름에 사용할 수 있는 문자/기호에 대한 요구 사항을 적용하지 않습니다.
문자열로 인코딩된 인스턴스화된 매개 변수화된 인터페이스의 형식은 다음과 같습니다.
매개 변수가 있는 인터페이스의 이름 | 백틱 문자(') | 형식 매개 변수 수 | 왼쪽 꺾쇠 괄호(<) | 쉼표로 구분된 각 형식 매개 변수의 네임스페이스 정규화된 이름입니다. | 오른쪽 꺾쇠 괄호(>) |
형식 매개 변수는 다음과 같습니다.
- 매개 변수가 없는 비 네임스페이스 정규화된 형식(예: WinRT 기본 형식)
- 매개 변수가 없는 네임스페이스 정규화된 형식입니다.
- 정규화된 네임스페이스 정규화된 매개 변수화된 인터페이스.
예제
다음 C++ 예제에서는 RoParseTypeName 함수를 사용하여 지정된 형식 이름의 직접 자식 네임스페이스를 찾는 방법을 보여 줍니다.
#include <windows.h>
#include <stdio.h>
#include <WinRTString.h>
#include <TypeResolution.h>
HRESULT PrintParameterizedInterfaceParts(PCWSTR pszTypename);
int ShowUsage()
{
wprintf(L"Usage: RoParseTypeNameSample \"TypeName\"\n");
return -1;
}
int __cdecl wmain(int argc, WCHAR **argv)
{
if (argc != 2)
{
return ShowUsage();
}
HRESULT hr = PrintParameterizedInterfaceParts(argv[1]);
if (SUCCEEDED(hr))
{
return 0;
}
else
{
return -1;
}
}
HRESULT PrintParameterizedInterfaceParts(PCWSTR pszTypename)
{
HRESULT hr;
HSTRING hstrTypeName = nullptr;
HSTRING *phstrNameParts = nullptr;
DWORD cRetrievedNameParts = 0;
hr = WindowsCreateString(
pszTypename,
static_cast<UINT32>(wcslen(pszTypename)),
&hstrTypeName);
if (SUCCEEDED(hr))
{
hr = RoParseTypeName(
hstrTypeName,
&cRetrievedNameParts,
&phstrNameParts);
}
if (SUCCEEDED(hr))
{
wprintf(L"Parameterized interface %s is composed of:\n", pszTypename);
for (UINT32 i = 0; i < cRetrievedNameParts; i++)
{
wprintf(L"Element %d: %s\n", i, WindowsGetStringRawBuffer(phstrNameParts[i], nullptr));
}
}
else
{
wprintf(L"Invalid parameterized interface syntax: %s!\n", pszTypename);
}
// Clean up resources.
if (hstrTypeName != nullptr)
{
WindowsDeleteString(hstrTypeName);
}
for (UINT32 i = 0; i < cRetrievedNameParts; i++)
{
WindowsDeleteString(phstrNameParts[i]);
}
CoTaskMemFree(phstrNameParts);
return hr;
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 8 [데스크톱 앱 | UWP 앱] |
지원되는 최소 서버 | Windows Server 2012 [데스크톱 앱 | UWP 앱] |
대상 플랫폼 | Windows |
헤더 | rometadataresolution.h |
라이브러리 | WinTypes.lib |
DLL | WinTypes.dll |