Compartilhar via


Função RoGetParameterizedTypeInstanceIID (roparameterizediid.h)

Calcula o IID (identificador de interface) da interface ou do tipo delegado que resulta quando uma interface ou delegado parametrizado é instanciado com os argumentos de tipo especificados.

Sintaxe

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

[in] nameElements

Tipo: PCWSTR*

Um nome de tipo Windows Runtime analisado, conforme retornado pela função RoParseTypeName. Por exemplo, "Windows.Foundation.Collections.IVector'1" e "N1. N2. IFoo".

[in] metaDataLocator

Tipo: const IRoMetaDataLocator

Um retorno de chamada a ser usado para resolver metadados.

Uma implementação deve usar a função RoGetMetaDataFile para descobrir o arquivo de metadados necessário (.winmd) e examinar os metadados para determinar as informações de tipo necessárias. Como a função RoGetMetaDataFile não armazena em cache os resultados, os localizadores devem armazenar em cache os resultados conforme apropriado para o modelo de programação que está sendo implementado.

[out] iid

Tipo: GUID*

O IID da interface ou delegado que corresponde a nameElements.

[out, optional] pExtra

Tipo: ROPARAMIIDHANDLE*

Manipule para o IID que corresponde a nameElements.

Retornar valor

Tipo: HRESULT

Código de retorno Descrição
S_OK
A chamada foi bem-sucedida.
E_OUTOFMEMORY
Memória insuficiente disponível para concluir a tarefa.
E_INVALIDARG
O número errado de argumentos de tipo é fornecido para um tipo parametrizado.
 

Uma falha também poderá ocorrer se um tipo for inadequado para o contexto no qual ele aparece.

Comentários

A função RoGetParameterizedTypeInstanceIID é usada por implementadores de linguagem de programação.

Essa função é sem estado. O argumento metaDataLocator não é preservado entre chamadas e pode ser liberado assim que a chamada retorna.

A função RoGetParameterizedTypeInstanceIID não executa análise semântica profunda. Por exemplo, se IRoSimpleMetaDataBuilder especificar que uma estrutura contém um ponteiro de interface, essa função retornará êxito, mesmo que esses metadados sejam semanticamente inválidos. O valor do IID retornado não é especificado nesses casos.

Essa função pode invocar recursivamente o localizador de metadados fornecido como um argumento.

Se uma chamada para a função IRoSimpleMetaDataBuilder falhar, essa função retornará esse código de falha.

Exemplos


#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 Valor
Cliente mínimo com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho roparameterizediid.h
DLL Api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll