Bagikan melalui


Fungsi RoResolveNamespace (rometadataresolution.h)

Tentukan turunan langsung, jenis, dan sub-namespace layanan Windows Runtime yang ditentukan, dari bahasa pemrograman apa pun yang didukung oleh Windows Runtime.

Sintaks

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
);

Parameter

[in, optional] name

Jenis: const HSTRING

Namespace lengkap yang kami coba ambil anak langsungnya. Tanggal adalah parameter yang diperlukan.

Jika namespace ini kosong atau nullptr, fungsi RoResolveNamespace mengembalikan namespace tingkat atas. Baik Windows maupun namespace tingkat atas lainnya berada dalam grafik paket.

[in, optional] windowsMetaDataDir

Jenis: const HSTRING

Parameter opsional yang berisi jalur ke direktori SDK untuk mencari file metadata (.winmd).

Jika parameter ini tidak ditentukan (kosong atau nullptr), fungsi mencari di direktori metadata Windows default, %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Jenis: const DWORD

Jumlah jalur dalam array packageGraphDirs .

[in, optional] packageGraphDirs

Jenis: const HSTRING*

Jumlah jalur paket dalam array grafik dependensi paket eksplisit. Jumlah diabaikan jika packageGraphDirsadalah nullptr.

[out, optional] metaDataFilePathsCount

Jenis: DWORD*

Jumlah file metadata dalam array metaDataFilePaths .

[out, optional] metaDataFilePaths

Jenis: HSTRING**

Parameter output opsional yang berisi array yang dialokasikan callee dari jalur file absolut dari semua file metadata (.winmd) yang mungkin berisi turunan langsung dari nama.

[out, optional] subNamespacesCount

Jenis: DWORD*

Jumlah file metadata dalam array subNamespace.

[out, optional] subNamespaces

Jenis: HSTRING**

Parameter output opsional yang berisi array nama turunan langsung yang dialokasikan callee dari namespace yang diberikan. Daftar ini adalah petunjuk dari subnamespace lain dan belum tentu lengkap.

Nilai kembali

Jenis: HRESULT

Fungsi ini dapat mengembalikan salah satu nilai ini.

Menampilkan kode Deskripsi
S_OK
Resolusi turunan langsung namespace berhasil, yang berarti setidaknya satu file atau satu nama subnamespace ditemukan.
RO_E_METADATA_NAME_NOT_FOUND
Menunjukkan salah satu hal berikut ini:
  • Parameter output metaDataFilePaths dan subNamespaces diatur, tetapi tidak ada file metadata dan tidak ada subnamespace layanan untuk namespace yang diberikan yang ditemukan.
  • metaDataFilePaths hanya diatur, tetapi tidak ada file metadata untuk namespace yang diberikan yang ditemukan.
  • subNamespace hanya diatur, tetapi tidak ada subnamespace layanan untuk namespace yang diberikan yang ditemukan.
E_INVALIDARG
Menunjukkan salah satu hal berikut ini:
  • MetaDataFilePaths dan subNamespace tidak diatur.
  • Nama namespace telah menyematkan karakter null.
  • Namespace kosong atau NULL dan subNamespace tidak diatur.
  • Namespace kosong atau NULL dan metaDataFilePaths diatur.

Keterangan

Gunakan fungsi RoResolveNamespace untuk menjelajahi hierarki namespace Windows Runtime.

Contoh

Contoh C++ berikut menunjukkan cara menggunakan fungsi RoResolveNamespace untuk menemukan namespace turunan langsung untuk nama jenis tertentu.

#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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 8 [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2012 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header rometadataresolution.h
Pustaka WinTypes.lib
DLL WinTypes.dll