Condividi tramite


Funzione RoResolveNamespace (rometadataresolution.h)

Determinare i nomi figlio, tipi e sotto-spazio dei nomi diretti dello spazio dei nomi Windows Runtime specificato, da qualsiasi linguaggio di programmazione supportato dal Windows Runtime.

Sintassi

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

Parametri

[in, optional] name

Tipo: const HSTRING

Spazio dei nomi completo per il quale si sta tentando di recuperare elementi figlio diretti. Parametro obbligatorio.

Se questo spazio dei nomi è vuoto o nullptr, la funzione RoResolveNamespace restituisce spazi dei nomi di primo livello. Sia Windows che altri spazi dei nomi di primo livello sono presenti nel grafico del pacchetto.

[in, optional] windowsMetaDataDir

Tipo: const HSTRING

Parametro facoltativo che contiene un percorso della directory SDK per cercare i file di metadati (con estensione winmd).

Se questo parametro non è specificato (vuoto o nullptr), la funzione cerca nella directory dei metadati di Windows predefinita, %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Tipo: const DWORD

Numero di percorsi nella matrice packageGraphDirs .

[in, optional] packageGraphDirs

Tipo: const HSTRING*

Conteggio dei percorsi del pacchetto nella matrice grafo di dipendenza del pacchetto esplicito. Il conteggio viene ignorato se packageGraphDirs è nullptr.

[out, optional] metaDataFilePathsCount

Tipo: DWORD*

Numero di file di metadati nella matrice metaDataFilePaths .

[out, optional] metaDataFilePaths

Tipo: HSTRING**

Parametro di output facoltativo che contiene la matrice allocata chiamata di percorsi di file assoluti di tutti i file di metadati (.winmd) che potrebbero contenere elementi figlio diretti di nome.

[out, optional] subNamespacesCount

Tipo: DWORD*

Numero di file di metadati nella matrice subNamespaces .

[out, optional] subNamespaces

Tipo: HSTRING**

Parametro di output facoltativo contenente una matrice allocata di chiamate di nomi di elementi figlio diretti dello spazio dei nomi specificato. Questo elenco è un hint di altri sottonamespace e non è necessariamente completo.

Valore restituito

Tipo: HRESULT

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
La risoluzione diretta degli spazi dei nomi figlio ha esito positivo, il che significa che è stato trovato almeno un file o un nome di sottonamespace.
RO_E_METADATA_NAME_NOT_FOUND
Indica uno dei seguenti elementi:
  • i parametri di output metaDataFilePaths e subNamespaces sono impostati, ma non sono stati trovati file di metadati e nessun sottonamespace per lo spazio dei nomi specificato.
  • metaDataFilePaths è impostato solo, ma non sono stati trovati file di metadati per lo spazio dei nomi specificato.
  • solo subNamespaces è impostato, ma non sono stati trovati sottonamespace per lo spazio dei nomi specificato.
E_INVALIDARG
Indica uno dei seguenti elementi:
  • I metaDataFilePath e i subNamespace non sono impostati.
  • Il nome dello spazio dei nomi include caratteri Null incorporati.
  • Lo spazio dei nomi è vuoto o NULL e subNamespaces non è impostato.
  • Lo spazio dei nomi è vuoto o NULL e metaDataFilePaths è impostato.

Commenti

Usare la funzione RoResolveNamespace per esplorare le gerarchie dello spazio dei nomi Windows Runtime.

Esempio

Nell'esempio C++ seguente viene illustrato come usare la funzione RoResolveNamespace per trovare gli spazi dei nomi figlio diretti per un nome di tipo specificato.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione rometadataresolution.h
Libreria WinTypes.lib
DLL WinTypes.dll