Partager via


RoGetParameterizedTypeInstanceIID, fonction (roparameterizediid.h)

Calcule l’identificateur d’interface (IID) du type d’interface ou de délégué qui résulte lorsqu’une interface paramétrable ou un délégué est instancié avec les arguments de type spécifiés.

Syntaxe

HRESULT RoGetParameterizedTypeInstanceIID(
                  UINT32                     nameElementCount,
  [in]            PCWSTR                     *nameElements,
  [in]            const IRoMetaDataLocator & metaDataLocator,
  [out]           GUID                       *iid,
  [out, optional] ROPARAMIIDHANDLE           *pExtra
);

Paramètres

nameElementCount

Type : UINT32

Nombre d’éléments dans nameElements.

[in] nameElements

Type : PCWSTR*

Nom de type Windows Runtime analysé, tel que retourné par la fonction RoParseTypeName. Par exemple, « Windows.Foundation.Collections.IVector'1 » et « N1. N2. IFoo ».

[in] metaDataLocator

Type : const IRoMetaDataLocator

Rappel à utiliser pour résoudre les métadonnées.

Une implémentation doit utiliser la fonction RoGetMetaDataFile pour découvrir le fichier de métadonnées (.winmd) nécessaire et examiner les métadonnées pour déterminer les informations de type nécessaires. Étant donné que la fonction RoGetMetaDataFile ne met pas en cache les résultats, les localisateurs doivent mettre en cache les résultats en fonction du modèle de programmation en cours d’implémentation.

[out] iid

Type : GUID*

IID de l’interface ou du délégué qui correspond à nameElements.

[out, optional] pExtra

Type : ROPARAMIIDHANDLE*

Handle vers l’IID qui correspond à nameElements.

Valeur retournée

Type : HRESULT

Code de retour Description
S_OK
L’appel a réussi.
E_OUTOFMEMORY
Mémoire insuffisante pour terminer la tâche.
E_INVALIDARG
Le nombre incorrect d’arguments de type est fourni pour un type paramétrable.
 

Un échec peut également se produire si un type est inapproprié pour le contexte dans lequel il apparaît.

Remarques

La fonction RoGetParameterizedTypeInstanceIID est destinée aux implémenteurs de langage de programmation.

Cette fonction est sans état. L’argument metaDataLocator n’est pas conservé entre les appels et peut être libéré dès que l’appel est retourné.

La fonction RoGetParameterizedTypeInstanceIID n’effectue pas d’analyse sémantique approfondie. Par instance, si IRoSimpleMetaDataBuilder spécifie qu’une structure contient un pointeur d’interface, cette fonction retourne la réussite, même si ces métadonnées ne sont sémantiquement pas valides. La valeur de l’IID retourné n’est pas spécifiée dans de tels cas.

Cette fonction peut appeler de manière récursive le localisateur de métadonnées fourni en tant qu’argument.

Si un appel à la fonction IRoSimpleMetaDataBuilder échoue, cette fonction retourne ce code d’échec.

Exemples


#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);
}


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête roparameterizediid.h
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll