다음을 통해 공유


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
S_OK
구문 분석이 성공했습니다.
E_INVALIDARG
typeName 은 포함된 null을 포함하거나 비어 있습니다.
RO_E_METADATA_INVALID_TYPE_FORMAT
typename 이 잘 구성되지 않았습니다.

설명

RoParseTypeName 함수는 문자열로 인코딩된 형식 이름을 구문 분석하고 HSTRING 값의 배열을 반환합니다. 배열의 첫 번째 요소는 기본 형식이고 나머지 배열 요소는 사전 순서 트리 순회 순서의 형식 매개 변수(있는 경우)입니다. 문 분석이 성공하면 S_OK 반환됩니다.

가능한 다양한 입력 형식 이름의 예는 다음과 같습니다.

  • 예제 1(네임스페이스가 아닌 정규화된 형식)
    • 입력 형식 이름

      문자열

    • 출력

      Array 요소 0: String

  • 예제 2(매개 변수가 없는 네임스페이스 정규화된 형식)
    • 입력 형식 이름

      Windows.Foundation.IExtensionInformation

    • 출력

      Array 요소 0: Windows.Foundation.IExtensionInformation

  • 예제 3(인스턴스화된 매개 변수화된 인터페이스 형식)
    • 입력 형식 이름

      Windows.Foundation.Collections.IIterator1&lt;Windows.Foundation.Collections.IMapView2<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

매개 변수가 없는 형식을 구문 분석할 때 RoParseTypeName 함수는 요소가 하나 있는 배열을 반환합니다. 위의 예제 1 및 예제 2를 참조하세요.

입력 문자열은 비어 있지 않아야 하며 포함된 null 문자를 포함하지 않아야 합니다. 그렇지 않으면 E_INVALIDARG API가 실패합니다. 형식 이름이 IVector'1<과 같이 잘못된 형식이면 RO_E_METADATA_INVALID_TYPE_FORMAT 오류 코드로 API가 실패합니다.

RoParseTypeName 함수는 구문이 아닌 typename 형식의 유효성만 검사합니다. 예를 들어 함수는 네임스페이스 정규화된 매개 변수화된 인터페이스 typename이 다음 표에 표시된 형식을 따르는지 확인하지만 , 또는 > 문자를 포함하지 <않아야 한다는 점을 제외하고는 형식 이름에 사용할 수 있는 문자/기호에 대한 요구 사항을 적용하지 않습니다.

문자열로 인코딩된 인스턴스화된 매개 변수화된 인터페이스의 형식은 다음과 같습니다.

매개 변수가 있는 인터페이스의 이름 백틱 문자(') 형식 매개 변수 수 왼쪽 꺾쇠 괄호(<) 쉼표로 구분된 각 형식 매개 변수의 네임스페이스 정규화된 이름입니다. 오른쪽 꺾쇠 괄호(>)
 

형식 매개 변수는 다음과 같습니다.

  • 매개 변수가 없는 비 네임스페이스 정규화된 형식(예: WinRT 기본 형식)
  • 매개 변수가 없는 네임스페이스 정규화된 형식입니다.
  • 정규화된 네임스페이스 정규화된 매개 변수화된 인터페이스.
성공하면 호출자는 CoTaskMemFree를 사용하여 배열을 해제하고 WindowsDeleteString을 사용하여 RoParseTypeName에서 반환된 typenameParts 배열의 할당을 취소하여 HSTRING 값을 해제합니다.

예제

다음 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