Partager via


RoGetParameterizedTypeInstanceIID, fonction (roparameterizediid.h)

Calcule l’identificateur d’interface (IID) de l’interface ou du type 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 qu’il est 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 nécessaires (.winmd) 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 appropriés pour le modèle de programmation implémenté.

[out] iid

Type : GUID*

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

[out, optional] pExtra

Type : ROPARAMIIDHANDLE*

Handle to the IID that correspond with nameElements.

Valeur retournée

Type : HRESULT

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

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

Remarques

La fonction RoGetParameterizedTypeInstanceIID est utilisée par les 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 retourne.

La fonction RoGetParameterizedTypeInstanceIID n’effectue pas d’analyse sémantique approfondie. Par exemple, 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 pas valides sémantiquement. La valeur du 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.

Examples


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


Spécifications

Requirement Valeur
Client minimum requis Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
plateforme cible Fenêtres
Header roparameterizediid.h
Library OneCore.Lib
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll