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 |
---|---|
|
L'analisi è riuscita. |
|
typeName contiene valori Null incorporati o è vuoto. |
|
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
-
Nometipo di input
-
Esempio 2 (tipo qualificato da spazi dei nomi non con parametri)
-
Nometipo di input
Windows.Foundation.IExtensionInformation
-
Output
Elemento Array 0: Windows.Foundation.IExtensionInformation
-
Nometipo di input
-
Esempio 3 (tipo di interfaccia con parametri di cui è stata creata un'istanza)
-
Nometipo di input
Windows.Foundation.Collections.IIterator
1<Windows.Foundation.Collections.IMapView
2<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
-
Nometipo di input
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.
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 |