Compartilhar via


Função RoResolveNamespace (rometadataresolution.h)

Determine os filhos diretos, tipos e sub-namespaces do namespace Windows Runtime especificado, de qualquer linguagem de programação compatível com o Windows Runtime.

Sintaxe

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

Namespace completo para o qual estamos tentando recuperar filhos diretos. Esse é um parâmetro necessário.

Se esse namespace estiver vazio ou nullptr, a função RoResolveNamespace retornará namespaces de nível superior. O Windows e outros namespaces de nível superior estão no grafo do pacote.

[in, optional] windowsMetaDataDir

Tipo: const HSTRING

Parâmetro opcional que contém um caminho para o diretório do SDK para pesquisar arquivos de metadados (.winmd).

Se esse parâmetro não for especificado (vazio ou nullptr), a função pesquisará no diretório de metadados padrão do Windows, %windir%\System32\WinMetadata.

[in] packageGraphDirsCount

Tipo: const DWORD

Contagem de caminhos na matriz packageGraphDirs .

[in, optional] packageGraphDirs

Tipo: const HSTRING*

Contagem de caminhos de pacote no pacote explícito grafo de dependência matriz. A contagem será ignorada se packageGraphDirs for nullptr.

[out, optional] metaDataFilePathsCount

Tipo: DWORD*

Contagem de arquivos de metadados na matriz metaDataFilePaths .

[out, optional] metaDataFilePaths

Tipo: HSTRING**

Parâmetro de saída opcional que contém a matriz alocada por callee de caminhos de arquivo absolutos de todos os arquivos de metadados (.winmd) que podem conter filhos diretos de nome.

[out, optional] subNamespacesCount

Tipo: DWORD*

Contagem de arquivos de metadados na matriz subNamespaces .

[out, optional] subNamespaces

Tipo: HSTRING**

Parâmetro de saída opcional que contém uma matriz alocada por callee de nomes de filhos diretos do namespace fornecido. Essa lista é uma dica de outros subnamespaces e não está necessariamente concluída.

Retornar valor

Tipo: HRESULT

Essa função pode retornar um desses valores.

Código de retorno Descrição
S_OK
A resolução de filhos diretos do namespace é bem-sucedida, o que significa que pelo menos um arquivo ou um nome de subnamespace foi encontrado.
RO_E_METADATA_NAME_NOT_FOUND
Indica um dos seguintes:
  • Os parâmetros de saída metaDataFilePaths e subNamespaces são definidos, mas nenhum arquivo de metadados e nenhum subnamespace para o namespace fornecido foram encontrados.
  • metaDataFilePaths é definido apenas, mas nenhum arquivo de metadados para o namespace fornecido foi encontrado.
  • Os subNamespaces são definidos apenas, mas nenhum subnamespace para o namespace fornecido foi encontrado.
E_INVALIDARG
Indica um dos seguintes:
  • MetaDataFilePaths e subNamespaces não estão definidos.
  • O nome do namespace tem caracteres nulos inseridos.
  • O namespace está vazio ou NULL e os subNamespaces não estão definidos .
  • O namespace está vazio ou NULL e metaDataFilePaths está definido.

Comentários

Use a função RoResolveNamespace para explorar Windows Runtime hierarquias de namespace.

Exemplos

O exemplo C++ a seguir mostra como usar a função RoResolveNamespace para localizar os namespaces filho diretos para um nome 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 Valor
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho rometadataresolution.h
Biblioteca WinTypes.lib
DLL WinTypes.dll