RoResolveNamespace 함수(rometadataresolution.h)

Windows 런타임 지원하는 프로그래밍 언어에서 지정된 Windows 런타임 네임스페이스의 직접 자식, 형식 및 하위 네임스페이스를 결정합니다.

구문

HRESULT RoResolveNamespace(
  [in, optional]  const HSTRING name,
  [in, optional]  const HSTRING windowsMetaDataDir,
  [in]            const DWORD   packageGraphDirsCount,
  [in, optional]  const HSTRING *packageGraphDirs,
  [out, optional] DWORD         *metaDataFilePathsCount,
  [out, optional] HSTRING       **metaDataFilePaths,
  [out, optional] DWORD         *subNamespacesCount,
  [out, optional] HSTRING       **subNamespaces
);

매개 변수

[in, optional] name

형식: const HSTRING

직접 자식을 검색하려는 전체 네임스페이스입니다. 필수 매개 변수입니다.

이 네임스페이스가 비어 있거나 nullptr이면 RoResolveNamespace 함수는 최상위 네임스페이스를 반환합니다. Windows 및 기타 최상위 네임스페이스는 모두 패키지 그래프에 있습니다.

[in, optional] windowsMetaDataDir

형식: const HSTRING

메타데이터(.winmd) 파일을 검색하기 위한 SDK 디렉터리의 경로를 포함하는 선택적 매개 변수입니다.

이 매개 변수를 지정하지 않으면(빈 또는 nullptr) 함수는 기본 Windows 메타데이터 디렉터리 %windir%\System32\WinMetadata를 검색합니다.

[in] packageGraphDirsCount

형식: const DWORD

packageGraphDirs 배열의 경로 수입니다.

[in, optional] packageGraphDirs

형식: const HSTRING*

명시적 패키지 종속성 그래프 배열의 패키지 경로 수입니다. packageGraphDirsnullptr인 경우 개수가 무시됩니다.

[out, optional] metaDataFilePathsCount

형식: DWORD*

metaDataFilePaths 배열의 메타데이터 파일 수입니다.

[out, optional] metaDataFilePaths

형식: HSTRING**

이름의 직접 자식을 포함할 수 있는 모든 메타데이터(.winmd) 파일의 절대 파일 경로에 대해 호출 수신자가 할당한 배열을 포함하는 선택적 출력 매개 변수입니다.

[out, optional] subNamespacesCount

형식: DWORD*

subNamespaces 배열의 메타데이터 파일 수입니다.

[out, optional] subNamespaces

형식: HSTRING**

지정된 네임스페이스의 직접 자식 이름의 호출 수신자 할당 배열을 포함하는 선택적 출력 매개 변수입니다. 이 목록은 다른 하위 영역의 힌트이며 반드시 완료되지는 않습니다.

반환 값

형식: HRESULT

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 Description
S_OK
네임스페이스 직접 자식 확인이 성공했습니다. 즉, 하나 이상의 파일 또는 하나의 하위 이름스페이스 이름이 발견되었습니다.
RO_E_METADATA_NAME_NOT_FOUND
다음 중 하나를 나타냅니다.
  • metaDataFilePathssubNamespaces 출력 매개 변수가 설정되어 있지만 메타데이터 파일과 지정된 네임스페이스에 대한 하위 이름을 찾을 수 없습니다.
  • metaDataFilePaths 만 설정되지만 지정된 네임스페이스에 대한 메타데이터 파일을 찾을 수 없습니다.
  • subNamespaces 만 설정되지만 지정된 네임스페이스에 대한 하위 이름을 찾을 수 없습니다.
E_INVALIDARG
다음 중 하나를 나타냅니다.
  • metaDataFilePathssubNamespaces가 모두 설정되지 않았습니다.
  • 네임스페이스 이름에는 null 문자가 포함되어 있습니다.
  • 네임스페이스가 비어 있거나 NULL 이고 subNamespaces 가 설정되지 않았습니다.
  • 네임스페이스가 비어 있거나 NULL 이고 metaDataFilePaths 가 설정됩니다.

설명

RoResolveNamespace 함수를 사용하여 Windows 런타임 네임스페이스 계층 구조를 탐색합니다.

예제

다음 C++ 예제에서는 RoResolveNamespace 함수를 사용하여 지정된 형식 이름에 대한 직접 자식 네임스페이스를 찾는 방법을 보여 줍니다.

#include <windows.h>
#include <stdio.h>
#include <WinRTString.h>
#include <TypeResolution.h>
#include <atlbase.h>

HRESULT PrintDirectChildrenSubNamespacesAndTypesPaths(PCWSTR pszName);

int ShowUsage()
{
    wprintf(L"Usage: RoResolveNamespaceSample TypeName\n");
    return -1;
}

int __cdecl wmain(int argc, WCHAR **argv)
{
    if (argc != 2)
    {
        return ShowUsage();
    }

    HRESULT hr = PrintDirectChildrenSubNamespacesAndTypesPaths(argv[1]);

    if (SUCCEEDED(hr))
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

HRESULT PrintDirectChildrenSubNamespacesAndTypesPaths(PCWSTR pszName)
{
    HRESULT hr;
    HSTRING hstrName = nullptr;
    DWORD cRetrievedSubNamespaces = 0;
    HSTRING *phstrRetrievedSubNamespaces = nullptr;
    DWORD cRetrievedMetaDataFilePaths = 0;
    HSTRING *phstrRetrievedMetaDataFiles = nullptr;

    hr = WindowsCreateString(
        pszName,
        static_cast<UINT32>(wcslen(pszName)),
        &hstrName);

    if (SUCCEEDED(hr))
    {
        hr = RoResolveNamespace(
            hstrName,
            nullptr,
            0,
            nullptr,
            &cRetrievedMetaDataFilePaths,
            &phstrRetrievedMetaDataFiles,
            &cRetrievedSubNamespaces,
            &phstrRetrievedSubNamespaces);
    }

    if (SUCCEEDED(hr))
    {
        if (cRetrievedSubNamespaces != 0)
        {
            wprintf(L"Direct-children subnamespaces of %s are:\n", pszName);

            for (DWORD i = 0; i < cRetrievedSubNamespaces; i++)
            {
                wprintf(L"Subnamespace %d: %s\n", i, WindowsGetStringRawBuffer(phstrRetrievedSubNamespaces[i], nullptr));
            }
        }

        if (cRetrievedMetaDataFilePaths != 0)
        {
            wprintf(L"Potential direct-children types of %s could be found in:\n", pszName);

            for (DWORD i = 0; i < cRetrievedMetaDataFilePaths; i++)
            {
                wprintf(L"Metadata file path %d: %s\n", i, WindowsGetStringRawBuffer(phstrRetrievedMetaDataFiles[i], nullptr));
            }
        }
    }
    else if (hr == RO_E_METADATA_NAME_NOT_FOUND)
    {
        wprintf(L"Name %s was not found!\n", pszName);
    }
    else
    {
        wprintf(L"Error %x occurred while trying to resolve %s!\n", hr, pszName);
    }

    // Clean up resources.
    if (hstrName != nullptr)
    {
        WindowsDeleteString(hstrName);
    }

    for (DWORD i = 0; i < cRetrievedSubNamespaces; i++)
    {
        WindowsDeleteString(phstrRetrievedSubNamespaces[i]);
    }

    CoTaskMemFree(phstrRetrievedSubNamespaces);

    for (DWORD i = 0; i < cRetrievedMetaDataFilePaths; i++)
    {
        WindowsDeleteString(phstrRetrievedMetaDataFiles[i]);
    }
    
    CoTaskMemFree(phstrRetrievedMetaDataFiles);

    return hr;
}

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 rometadataresolution.h
라이브러리 WinTypes.lib
DLL WinTypes.dll