Поделиться через


Функция 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

Необязательный параметр, содержащий путь к каталогу ПАКЕТА SDK для поиска файлов метаданных (WINMD).

Если этот параметр не указан (пустой или nullptr), функция выполняет поиск в каталоге метаданных Windows по умолчанию % windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Тип: const DWORD

Количество путей в массиве packageGraphDirs .

[in, optional] packageGraphDirs

Тип: const HSTRING*

Количество путей к пакетам в явном массиве граф зависимостей пакета. Счетчик игнорируется, если packageGraphDirs имеет значение nullptr.

[out, optional] metaDataFilePathsCount

Тип: DWORD*

Количество файлов метаданных в массиве metaDataFilePaths .

[out, optional] metaDataFilePaths

Тип: HSTRING**

Необязательный выходной параметр, содержащий выделенный вызываемой объект массив абсолютных путей к файлам всех файлов метаданных (WINMD), которые могут содержать прямые дочерние элементы имени.

[out, optional] subNamespacesCount

Тип: DWORD*

Количество файлов метаданных в массиве subNamespaces .

[out, optional] subNamespaces

Тип: HSTRING**

Необязательный выходной параметр, содержащий выделенный вызывающим объектом массив имен прямых дочерних элементов заданного пространства имен. Этот список является указанием на другие подпространства имен и не обязательно является полным.

Возвращаемое значение

Тип: HRESULT

Эта функция может возвращать одно из этих значений.

Код возврата Описание
S_OK
Разрешение прямых дочерних пространств имен выполнено успешно. Это означает, что найден по крайней мере один файл или одно имя подпространства имен.
RO_E_METADATA_NAME_NOT_FOUND
Указывает на одно из следующих элементов:
  • Выходные параметры metaDataFilePaths и subNamespaces заданы, но файлы метаданных и подпространства имен для данного пространства имен не найдены.
  • Задан только параметр metaDataFilePaths, но файлы метаданных для данного пространства имен не найдены.
  • Задано только subNamespaces, но подпространства имен для данного пространства имен не найдено.
E_INVALIDARG
Указывает на одно из следующих элементов:
  • Как metaDataFilePaths, так и subNamespaces не заданы .
  • Имя пространства имен содержит внедренные символы NULL.
  • Пространство имен пусто или null , а вложенные пространства имен не заданы .
  • Пространство имен пусто или значение 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
Header rometadataresolution.h
Библиотека WinTypes.lib
DLL WinTypes.dll