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 |
標頭 | rometadataresolution.h |
程式庫 | WinTypes.lib |
Dll | WinTypes.dll |