Condividi tramite


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
S_OK
La chiamata è stata completata correttamente.
E_OUTOFMEMORY
Memoria insufficiente disponibile per completare l'attività.
E_INVALIDARG
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