Compartir a través de


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.

Syntax

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 de nameElements.

[in] nameElements

Tipo: PCWSTR*

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 corresponde a nameElements.

Valor devuelto

Tipo: HRESULT

Código de retorno Description
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 es inadecuado para el contexto en el que aparece.

Observaciones

La función RoGetParameterizedTypeInstanceIID es para su uso por parte de 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 se devuelva la llamada.

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 éxito, aunque estos metadatos no sean semánticamente no válidos. El valor del IID devuelto no se especifica en tales 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.

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


Requisitos

Requirement Importancia
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo admitido Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
de la plataforma de destino de Windows
Header roparameterizediid.h
Library OneCore.Lib
DLL de Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll