Функция 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
Эта функция может возвращать одно из этих значений.
Код возврата | Описание |
---|---|
|
Разрешение прямых дочерних пространств имен выполнено успешно. Это означает, что найден по крайней мере один файл или одно имя подпространства имен. |
|
Указывает на одно из следующих элементов:
|
|
Указывает на одно из следующих элементов:
|
Комментарии
Используйте функцию 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 |