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 |
---|---|
|
A chamada foi bem-sucedida. |
|
Memória insuficiente disponível para concluir a tarefa. |
|
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 |