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*
显式包依赖项关系图数组中的包路径计数。 如果 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 |
标头 | rometadataresolution.h |
Library | WinTypes.lib |
DLL | WinTypes.dll |