Condividi tramite


Funzione RoParseTypeName (rometadataresolution.h)

Analizza un nome di tipo e i parametri di tipo esistenti, nel caso dei tipi con parametri.

Sintassi

HRESULT RoParseTypeName(
  [in]  HSTRING typeName,
  [out] DWORD   *partsCount,
        HSTRING **typeNameParts
);

Parametri

[in] typeName

Tipo: HSTRING

Typename con codifica stringa. Il nometipo può essere un tipo qualificato non dello spazio dei nomi, un tipo qualificato dallo spazio dei nomi non con parametri o un tipo con parametri qualificato dallo spazio dei nomi completo.

[out] partsCount

Tipo: DWORD*

Numero di elementi nella matrice typenameParts .

typeNameParts

Tipo: HSTRING**

Il primo elemento della matrice è il tipo specificato e gli elementi della matrice rimanenti sono i parametri di tipo (se presenti) nell'ordine dell'albero prewalk.

Valore restituito

Tipo: HRESULT

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
L'analisi è riuscita.
E_INVALIDARG
typeName contiene valori Null incorporati o è vuoto.
RO_E_METADATA_INVALID_TYPE_FORMAT
typename non è ben formato.

Commenti

La funzione RoParseTypeName analizza il nome del tipo con codifica stringa e restituisce una matrice di valori HSTRING . Il primo elemento della matrice è il tipo di base e gli elementi della matrice rimanenti sono i parametri di tipo, se presenti, nell'ordine di attraversamento dell'albero preordinato. S_OK viene restituito se l'analisi ha avuto esito positivo.

Ecco alcuni esempi di nomi di tipo di input diversi:

  • Esempio 1 (tipo qualificato non dello spazio dei nomi)
    • Nometipo di input

      string

    • Output

      Elemento Array 0: String

  • Esempio 2 (tipo qualificato da spazi dei nomi non con parametri)
    • Nometipo di input

      Windows.Foundation.IExtensionInformation

    • Output

      Elemento Array 0: Windows.Foundation.IExtensionInformation

  • Esempio 3 (tipo di interfaccia con parametri di cui è stata creata un'istanza)
    • Nometipo di input

      Windows.Foundation.Collections.IIterator1&lt;Windows.Foundation.Collections.IMapView2<Windows.Foundation.Collections.IVector'1<String>, String>>

    • Output

      Elemento Array 0: Windows.Foundation.Collections.IIterator'1

      Elemento Array 1: Windows.Foundation.Collections.IMapView'2

      Elemento Array 2: Windows.Foundation.Collections.IVector'1

      Elemento matrice 3: String

      Elemento Matrice 4: String

Quando si analizza un tipo non con parametri, la funzione RoParseTypeName restituisce una matrice con un elemento. Vedere l'esempio 1 e l'esempio 2 precedente.

La stringa di input deve essere non vuota e non deve contenere caratteri Null incorporati. In caso contrario, l'API ha esito negativo con E_INVALIDARG. Se il nometipo non è valido, ad esempio IVector'1<, l'API avrà esito negativo con il codice di errore RO_E_METADATA_INVALID_TYPE_FORMAT .

La funzione RoParseTypeName convalida solo il formato del nometipo e non la relativa sintassi. Ad esempio, la funzione convalida che un typename di interfaccia con parametri qualificato dallo spazio dei nomi segue il formato illustrato nella tabella seguente, ma non impone alcun requisito per i caratteri o i simboli che possono essere usati nel nometipo, ad eccezione del fatto che non deve contenere ' , <o > caratteri .

Il formato per un'interfaccia con parametri con codifica stringa con parametri è il seguente:

Nome dell'interfaccia con parametri Carattere di backtick (') Numero di parametri di tipo Parentesi angolare sinistra (<) Nome completo dello spazio dei nomi di ogni parametro di tipo, separato da virgole. Parentesi angolare destra (>)
 

I parametri di tipo possono essere:

  • Tipi non con parametri, non qualificati per lo spazio dei nomi, come i tipi fondamentali di WinRT.
  • Tipi qualificati per spazi dei nomi non con parametri.
  • Interfacce con parametri con istanza completa dello spazio dei nomi.
In caso di esito positivo, il chiamante è responsabile della deallocazione della matrice typenameParts restituita da RoParseTypeName usando CoTaskMemFree per liberare la matrice e WindowsDeleteString per liberare i valori HSTRING .

Esempio

L'esempio C++ seguente illustra come usare la funzione RoParseTypeName 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>

HRESULT PrintParameterizedInterfaceParts(PCWSTR pszTypename);

int ShowUsage()
{
    wprintf(L"Usage: RoParseTypeNameSample \"TypeName\"\n");
    return -1;
}

int __cdecl wmain(int argc, WCHAR **argv)
{
    if (argc != 2)
    {
        return ShowUsage();
    }

    HRESULT hr = PrintParameterizedInterfaceParts(argv[1]);

    if (SUCCEEDED(hr))
    {
        return 0;
    }
    else
    {
        return -1;
    }
}

HRESULT PrintParameterizedInterfaceParts(PCWSTR pszTypename)
{
    HRESULT hr;
    HSTRING hstrTypeName = nullptr;
    HSTRING *phstrNameParts = nullptr;
    DWORD cRetrievedNameParts = 0;

    hr = WindowsCreateString(
        pszTypename,
        static_cast<UINT32>(wcslen(pszTypename)),
        &hstrTypeName);

    if (SUCCEEDED(hr))
    {
        hr = RoParseTypeName(
            hstrTypeName,
            &cRetrievedNameParts,
            &phstrNameParts);
    }

    if (SUCCEEDED(hr))
    {
        wprintf(L"Parameterized interface %s is composed of:\n", pszTypename);

        for (UINT32 i = 0; i < cRetrievedNameParts; i++)
        {
            wprintf(L"Element %d: %s\n", i, WindowsGetStringRawBuffer(phstrNameParts[i], nullptr));
        }
    }
    else
    {
        wprintf(L"Invalid parameterized interface syntax: %s!\n", pszTypename);
    }

    // Clean up resources.
    if (hstrTypeName != nullptr)
    {
        WindowsDeleteString(hstrTypeName);
    }

    for (UINT32 i = 0; i < cRetrievedNameParts; i++)
    {
        WindowsDeleteString(phstrNameParts[i]);
    }

    CoTaskMemFree(phstrNameParts);

    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