次の方法で共有


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

この関数は、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
名前空間直接子の解決が成功しました。これは、少なくとも 1 つのファイルまたは 1 つのサブ名前空間名が見つかったことを意味します。
RO_E_METADATA_NAME_NOT_FOUND
次のいずれかを示します。
  • metaDataFilePaths および subNamespaces 出力パラメーターが設定されていますが、メタデータ ファイルがなく、指定された名前空間のサブ名前空間も見つかりませんでした。
  • metaDataFilePaths のみが設定されていますが、指定された名前空間のメタデータ ファイルが見つかりませんでした。
  • subNamespaces のみが設定されていますが、指定された名前空間のサブ名前空間が見つかりませんでした。
E_INVALIDARG
次のいずれかを示します。
  • metaDataFilePathssubNamespace の両方が設定されていません。
  • 名前空間名に null 文字が埋め込まれています。
  • 名前空間が空または NULL で、 subNamespace が 設定されていません。
  • 名前空間が空または 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
Library WinTypes.lib
[DLL] WinTypes.dll