Función RoResolveNamespace (rometadataresolution.h)

Determine los elementos secundarios directos, los tipos y los subespacios de nombres del espacio de nombres Windows Runtime especificado, desde cualquier lenguaje de programación compatible con el Windows Runtime.

Sintaxis

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

Parámetros

[in, optional] name

Tipo: const HSTRING

Espacio de nombres completo para el que estamos intentando recuperar elementos secundarios directos. Es un parámetro obligatorio.

Si este espacio de nombres está vacío o nullptr, la función RoResolveNamespace devuelve espacios de nombres de nivel superior. Tanto Windows como otros espacios de nombres de nivel superior están en el gráfico de paquetes.

[in, optional] windowsMetaDataDir

Tipo: const HSTRING

Parámetro opcional que contiene una ruta de acceso al directorio del SDK para buscar archivos de metadatos (.winmd).

Si no se especifica este parámetro (vacío o nullptr), la función busca en el directorio de metadatos predeterminado de Windows, %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Tipo: const DWORD

Recuento de rutas de acceso en la matriz packageGraphDirs .

[in, optional] packageGraphDirs

Tipo: const HSTRING*

Recuento de rutas de acceso de paquete en la matriz de gráficos de dependencias de paquetes explícita. El recuento se omite si packageGraphDirs es nullptr.

[out, optional] metaDataFilePathsCount

Tipo: DWORD*

Recuento de archivos de metadatos en la matriz metaDataFilePaths .

[out, optional] metaDataFilePaths

Tipo: HSTRING**

Parámetro de salida opcional que contiene la matriz asignada por el destinatario de rutas de acceso de archivo absolutas de todos los archivos de metadatos (.winmd) que podrían contener elementos secundarios directos del nombre.

[out, optional] subNamespacesCount

Tipo: DWORD*

Recuento de archivos de metadatos en la matriz subNamespaces .

[out, optional] subNamespaces

Tipo: HSTRING**

Parámetro de salida opcional que contiene una matriz asignada por el destinatario de nombres de elementos secundarios directos del espacio de nombres especificado. Esta lista es una sugerencia de otros subespacios de nombres y no es necesariamente completa.

Valor devuelto

Tipo: HRESULT

Esta función puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
La resolución de elementos secundarios directos del espacio de nombres se realiza correctamente, lo que significa que se encontró al menos un archivo o un nombre de subnombres.
RO_E_METADATA_NAME_NOT_FOUND
Indica una de las siguientes opciones:
  • Se establecen los parámetros de salida metaDataFilePaths y subNamespaces, pero no se encontraron archivos de metadatos ni espacios de nombres secundarios para el espacio de nombres especificado.
  • Solo se establece metaDataFilePaths, pero no se encontraron archivos de metadatos para el espacio de nombres especificado.
  • solo se establece subNamespaces, pero no se encontraron subespacios para el espacio de nombres especificado.
E_INVALIDARG
Indica una de las siguientes opciones:
  • No se establecen metaDataFilePaths ni subNamespaces .
  • El nombre del espacio de nombres tiene caracteres NULL incrustados.
  • El espacio de nombres está vacío o NULL y no se establecen los subEspacios de nombres .
  • El espacio de nombres está vacío o NULL y se establece metaDataFilePaths .

Comentarios

Use la función RoResolveNamespace para explorar Windows Runtime jerarquías de espacios de nombres.

Ejemplos

En el siguiente ejemplo de C++ se muestra cómo usar la función RoResolveNamespace para buscar los espacios de nombres secundarios directos para un nombre de tipo especificado.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado rometadataresolution.h
Library WinTypes.lib
Archivo DLL WinTypes.dll