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
S_OK
La llamada se realizó correctamente.
E_OUTOFMEMORY
Memoria insuficiente disponible para completar la tarea.
E_INVALIDARG
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