Delen via


samenvoegwoord (RPC)

Sommige functies van de C-taal, zoals vakbonden, vereisen speciale MIDL-trefwoorden om hun gebruik te ondersteunen in externe procedure-aanroepen. Een samenvoeging in de C-taal is een variabele die objecten van verschillende typen en grootten bevat. De ontwikkelaar maakt meestal een variabele om de typen bij te houden die zijn opgeslagen in de samenvoeging. Als u correct wilt werken in een gedistribueerde omgeving, moet de variabele die het type samenvoeging aangeeft, of de discriminant, ook beschikbaar zijn voor de externe computer. MIDL bevat de trefwoorden [switch_type] en [switch_is] om het type en de naam te identificeren die niet van elkaar verschillen.

MIDL vereist dat de discriminant op twee manieren met de samenvoeging wordt verzonden:

  • De samenvoeging en de discriminant moeten worden opgegeven als parameters.
  • De unie en de discriminant moeten in een structuur worden verpakt.

Twee fundamentele soorten gediscrimineerde vakbonden worden geleverd door MIDL: nonencapsulated_union en encapsulated_union. De discriminant van een niet-ingekapselde samenvoeging is een andere parameter als de samenvoeging een parameter is. Het is een ander veld als de samenvoeging een veld van een structuur is. De definitie van een ingekapselde samenvoeging wordt omgezet in een structuurdefinitie waarvan het eerste veld de discriminant is en waarvan de tweede en laatste velden de samenvoeging zijn. In het volgende voorbeeld ziet u hoe u de samenvoeging en discriminant kunt opgeven als parameters:

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

De samenvoeging in het voorgaande voorbeeld kan één waarde bevatten: korte, float-of teken. De typedefinitie voor de samenvoeging bevat het kenmerk MIDL switch_type dat het type van de discriminant aangeeft. Hier geeft [switch_type(kort)] aan dat de discriminant van het type is korte. De schakeloptie moet een geheel getal zijn.

Als de vereniging lid is van een structuur, moet de discriminant lid zijn van dezelfde structuur. Als de samenvoeging een parameter is, moet de discriminant een andere parameter zijn. Het prototype voor de functie UnionParamProc in het voorgaande voorbeeld toont het discriminant sUtype als de laatste parameter van de aanroep. (De discriminant kan op elke positie in de aanroep worden weergegeven.) Het type parameter dat is opgegeven in de [switch_is] kenmerk moet overeenkomen met het type dat is opgegeven in de [switch_type] kenmerk.

In het volgende voorbeeld ziet u het gebruik van één structuur die de discriminant met de samenvoeging verpakt:

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

De Microsoft RPC MIDL-compiler staat samenvoegdeclaraties buiten typedef constructies toe. Deze functie is een extensie voor DCE IDL. Zie unionvoor meer informatie.