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 |
---|---|
|
L’appel a réussi. |
|
Mémoire insuffisante pour terminer la tâche. |
|
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 |