Partager via


Fonction RoResolveNamespace (rometadataresolution.h)

Déterminez les enfants, les types et les sous-espaces de noms directs de l’espace de noms Windows Runtime spécifié, à partir de n’importe quel langage de programmation pris en charge par le Windows Runtime.

Syntaxe

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

Paramètres

[in, optional] name

Type : const HSTRING

Espace de noms complet pour lequel nous essayons de récupérer des enfants directs. Il s’agit d’un paramètre obligatoire.

Si cet espace de noms est vide ou nullptr, la fonction RoResolveNamespace retourne des espaces de noms de niveau supérieur. Les espaces de noms Windows et d’autres espaces de noms de niveau supérieur se trouvent dans le graphique de package.

[in, optional] windowsMetaDataDir

Type : const HSTRING

Paramètre facultatif qui contient un chemin d’accès au répertoire du SDK pour rechercher des fichiers de métadonnées (.winmd).

Si ce paramètre n’est pas spécifié (vide ou nullptr), la fonction recherche dans le répertoire de métadonnées Windows par défaut, %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Type : const DWORD

Nombre de chemins dans le tableau packageGraphDirs .

[in, optional] packageGraphDirs

Type : const HSTRING*

Nombre de chemins d’accès de package dans le tableau graphe des dépendances package explicite. Le nombre est ignoré si packageGraphDirs a la valeur nullptr.

[out, optional] metaDataFilePathsCount

Type : DWORD*

Nombre de fichiers de métadonnées dans le tableau metaDataFilePaths .

[out, optional] metaDataFilePaths

Type : HSTRING**

Paramètre de sortie facultatif qui contient un tableau de chemins d’accès absolus de tous les fichiers de métadonnées (.winmd) qui pourraient éventuellement contenir des enfants de nom directs.

[out, optional] subNamespacesCount

Type : DWORD*

Nombre de fichiers de métadonnées dans le tableau subNamespaces .

[out, optional] subNamespaces

Type : HSTRING**

Paramètre de sortie facultatif qui contient un tableau alloué à l’appel de noms d’enfants directs de l’espace de noms donné. Cette liste est un indice d’autres sous-espaces et n’est pas nécessairement complète.

Valeur retournée

Type : HRESULT

Cette fonction peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
La résolution directe des enfants de l’espace de noms réussit, ce qui signifie qu’au moins un fichier ou un nom de sous-espace a été trouvé.
RO_E_METADATA_NAME_NOT_FOUND
Indique l’un des éléments suivants :
  • Les paramètres de sortie metaDataFilePaths et subNamespaces sont définis, mais aucun fichier de métadonnées et aucun sous-espace de noms pour l’espace de noms donné n’a été trouvé.
  • metaDataFilePaths uniquement est défini, mais aucun fichier de métadonnées pour l’espace de noms donné n’a été trouvé.
  • subNamespaces uniquement est défini, mais aucun sous-espace de noms pour l’espace de noms donné n’a été trouvé.
E_INVALIDARG
Indique l’un des éléments suivants :
  • MetaDataFilePaths et subNamespaces ne sont pas définis.
  • Le nom de l’espace de noms comporte des caractères Null incorporés.
  • L’espace de noms est vide ou NULL et les sous-espaces de noms ne sont pas définis.
  • L’espace de noms est vide ou NULL et metaDataFilePaths est défini.

Remarques

Utilisez la fonction RoResolveNamespace pour explorer Windows Runtime hiérarchies d’espaces de noms.

Exemples

L’exemple C++ suivant montre comment utiliser la fonction RoResolveNamespace pour rechercher les espaces de noms enfants directs pour un nom de type spécifié.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête rometadataresolution.h
Bibliothèque WinTypes.lib
DLL WinTypes.dll