Treinamento
Módulo
Compilar instruções de várias tabelas usando KQL - Training
Compilar instruções de várias tabelas usando KQL
Não há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Alguns recursos da linguagem C, como uniões, exigem palavras-chave MIDL especiais para dar suporte ao seu uso em chamadas de procedimento remoto. Uma união na linguagem C é uma variável que contém objetos de diferentes tipos e tamanhos. O desenvolvedor geralmente cria uma variável para acompanhar os tipos armazenados na união. Para operar corretamente em um ambiente distribuído, a variável que indica o tipo da união ou o discriminante também deve estar disponível para o computador remoto. MIDL fornece as palavras-chave [switch_type] e [switch_is] para identificar o tipo e o nome discriminantes.
MIDL exige que o discriminante seja transmitido com a união de uma das duas maneiras:
Dois tipos fundamentais de uniões discriminadas são fornecidos pela MIDL: nonencapsulated_union e encapsulated_union. O discriminante de uma união nonencapsulada será outro parâmetro se a união for um parâmetro. Será outro campo se a união for um campo de uma estrutura. A definição de uma união encapsulada é transformada em uma definição de estrutura cujo primeiro campo é o discriminante e cujo segundo e últimos campos são a união. O exemplo a seguir demonstra como fornecer a união e o discriminante como parâmetros:
typedef [switch_type(short)] union
{
[case(0)] short sVal;
[case(1)] float fVal;
[case(2)] char chVal;
[default] ;
} DISCRIM_UNION_PARAM_TYPE;
short UnionParamProc(
[in, switch_is(sUtype)] DISCRIM_UNION_PARAM_TYPE Union,
[in] short sUtype);
A união no exemplo anterior pode conter um único valor: curto, float ou char. A definição de tipo para a união inclui o atributo MIDL switch_type que especifica o tipo do discriminante. Aqui, [switch_type(short)] especifica que o discriminante é do tipo curto. A opção deve ser um tipo inteiro.
Se a união for membro de uma estrutura, o discriminador deverá ser membro da mesma estrutura. Se a união for um parâmetro, o discriminante deverá ser outro parâmetro. O protótipo da função UnionParamProc no exemplo anterior mostra o sUtype discriminante como o último parâmetro da chamada. (O discriminador pode aparecer em qualquer posição na chamada.) O tipo do parâmetro especificado no atributo [switch_is] deve corresponder ao tipo especificado no atributo [switch_type] .
O exemplo a seguir demonstra o uso de uma única estrutura que empacota o discriminante com a união:
typedef struct
{
short utype; /* discriminant can precede or follow union */
[switch_is(utype)] union
{
[case(0)] short sVal;
[case(1)] float fVal;
[case(2)] char chVal;
[default] ;
} u;
} DISCRIM_UNION_STRUCT_TYPE;
short UnionStructProc(
[in] DISCRIM_UNION_STRUCT_TYPE u1);
O compilador microsoft RPC MIDL permite declarações de união fora dos constructos typedef . Esse recurso é uma extensão para O IDL do DCE. Para obter mais informações, confira união.
Treinamento
Módulo
Compilar instruções de várias tabelas usando KQL - Training
Compilar instruções de várias tabelas usando KQL