Función RoGetParameterizedTypeInstanceIID (roparameterizediid.h)
Calcula el identificador de interfaz (IID) de la interfaz o el tipo delegado que da como resultado cuando se crea una instancia de una interfaz o delegado con parámetros con los argumentos de tipo especificados.
Sintaxis
HRESULT RoGetParameterizedTypeInstanceIID(
UINT32 nameElementCount,
[in] PCWSTR *nameElements,
[in] const IRoMetaDataLocator & metaDataLocator,
[out] GUID *iid,
[out, optional] ROPARAMIIDHANDLE *pExtra
);
Parámetros
nameElementCount
Tipo: UINT32
Número de elementos en nameElements.
[in] nameElements
Tipo: PCWSTR*
Un nombre de tipo de Windows Runtime analizado, tal y como devuelve la función RoParseTypeName. Por ejemplo, "Windows.Foundation.Collections.IVector'1" y "N1". N2. IFoo".
[in] metaDataLocator
Tipo: const IRoMetaDataLocator
Devolución de llamada que se va a usar para resolver metadatos.
Una implementación debe usar la función RoGetMetaDataFile para detectar el archivo de metadatos (.winmd) necesario y examinar los metadatos para determinar la información de tipo necesaria. Dado que la función RoGetMetaDataFile no almacena en caché los resultados, los localizadores deben almacenar en caché los resultados según corresponda para la implementación del modelo de programación.
[out] iid
Tipo: GUID*
IID de la interfaz o delegado que se corresponde con nameElements.
[out, optional] pExtra
Tipo: ROPARAMIIDHANDLE*
Identificador del IID que se corresponde con nameElements.
Valor devuelto
Tipo: HRESULT
Código devuelto | Descripción |
---|---|
|
La llamada se realizó correctamente. |
|
Memoria insuficiente disponible para completar la tarea. |
|
El número incorrecto de argumentos de tipo se proporciona para un tipo con parámetros. |
También puede producirse un error si un tipo no es adecuado para el contexto en el que aparece.
Comentarios
La función RoGetParameterizedTypeInstanceIID es para que la usen los implementadores del lenguaje de programación.
Esta función no tiene estado. El argumento metaDataLocator no se conserva entre las llamadas y se puede liberar tan pronto como la llamada vuelva.
La función RoGetParameterizedTypeInstanceIID no realiza un análisis semántico profundo. Por ejemplo, si IRoSimpleMetaDataBuilder especifica que una estructura contiene un puntero de interfaz, esta función devuelve el éxito, aunque dichos metadatos no sean semánticamente no válidos. El valor del IID devuelto no se especifica en estos casos.
Esta función puede invocar recursivamente el localizador de metadatos proporcionado como argumento.
Si se produce un error en una llamada a la función IRoSimpleMetaDataBuilder , esta función devolverá ese código de error.
Ejemplos
#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);
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | roparameterizediid.h |
Archivo DLL | Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll |