Funzione RoGetParameterizedTypeInstanceIID (roparameterizediid.h)
Calcola l'identificatore di interfaccia (IID) dell'interfaccia o del tipo delegato risultante quando viene creata un'istanza di un'interfaccia o un delegato con parametri con gli argomenti di tipo specificati.
Sintassi
HRESULT RoGetParameterizedTypeInstanceIID(
UINT32 nameElementCount,
[in] PCWSTR *nameElements,
[in] const IRoMetaDataLocator & metaDataLocator,
[out] GUID *iid,
[out, optional] ROPARAMIIDHANDLE *pExtra
);
Parametri
nameElementCount
Tipo: UINT32
Numero di elementi in nameElements.
[in] nameElements
Tipo: PCWSTR*
Oggetto analizzato Windows Runtime nome del tipo, come restituito dalla funzione RoParseTypeName. Ad esempio, "Windows.Foundation.Collections.IVector'1" e "N1. N2. IFoo".
[in] metaDataLocator
Tipo: const IRoMetaDataLocator
Callback da usare per la risoluzione dei metadati.
Un'implementazione deve usare la funzione RoGetMetaDataFile per individuare il file di metadati (con estensione winmd) necessario ed esaminare i metadati per determinare le informazioni sul tipo necessarie. Poiché la funzione RoGetMetaDataFile non memorizza nella cache i risultati, i localizzatori devono memorizzare nella cache i risultati appropriati per il modello di programmazione implementato.
[out] iid
Tipo: GUID*
ID dell'interfaccia o del delegato che corrisponde a nameElements.
[out, optional] pExtra
Tipo: ROPARAMIIDHANDLE*
Handle per l'IID corrispondente a nameElements.
Valore restituito
Tipo: HRESULT
Codice restituito | Descrizione |
---|---|
|
La chiamata è stata completata correttamente. |
|
Memoria insufficiente disponibile per completare l'attività. |
|
Il numero errato di argomenti di tipo viene fornito per un tipo con parametri. |
Un errore può verificarsi anche se un tipo non è appropriato per il contesto in cui viene visualizzato.
Commenti
La funzione RoGetParameterizedTypeInstanceIID viene usata dagli implementatori del linguaggio di programmazione.
Questa funzione è senza stato. L'argomento metaDataLocator non viene mantenuto tra le chiamate e può essere rilasciato non appena viene restituita la chiamata.
La funzione RoGetParameterizedTypeInstanceIID non esegue un'analisi semantica approfondita. Ad esempio, se IRoSimpleMetaDataBuilder specifica che una struttura contiene un puntatore all'interfaccia, questa funzione restituisce l'esito positivo, anche se tali metadati non sono semanticamente validi. Il valore dell'IID restituito non è specificato in questi casi.
Questa funzione può richiamare in modo ricorsivo il localizzatore di metadati fornito come argomento.
Se una chiamata alla funzione IRoSimpleMetaDataBuilder ha esito negativo, questa funzione restituirà tale codice di errore.
Esempio
#include <stdlib.h>
#include <windows.h>
#include <winrt/paraminstanceapi.h>
HRESULT ExampleMetadataLocator(
PCWSTR name,
IRoSimpleMetaDataBuilder& builder)
{
if (wcscmp(L"Example.IParam`1", name) == 0)
{
GUID piidParam= { /* 22046e87-28b5-4c53-9804-bc69f6ee0299 */
0x22046e87,
0x28b5,
0x4c53,
{0x98, 0x04, 0xbc, 0x69, 0xf6, 0xee, 0x02, 0x99}
};
builder.SetParameterizedInterface(piidParam, 1);
}
else if (wcscmp(L"Example.InterfaceGroup", name) == 0)
{
builder.SetInterfaceGroupSimpleDefault(name, L"Example.IFoo", nullptr);
}
else if (wcscmp(L"Example.IFoo", name) == 0)
{
GUID iidFoo = { /* f7f968c2-b1d8-47e0-98db-1b04f2bba657 */
0xf7f968c2,
0xb1d8,
0x47e0,
{0x98, 0xdb, 0x1b, 0x04, 0xf2, 0xbb, 0xa6, 0x57}
};
builder.SetWinRtInterface(iidFoo);
}
return E_ABORT;
}
int main()
{
// example, compute IID
GUID iidResult;
PCWSTR names = { L"Example.IParam`1", L"Example.InterfaceGroup" };
HRESULT hr = RoGetParameterizedTypeInstanceIID(
2,
names,
Ro::Locator(&ExampleMetadataLocator),
&iidResult);
}
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 | roparameterizediid.h |
DLL | Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll |