Directionele (parameter) kenmerken
Directionele kenmerken beschrijven of de gegevens worden verzonden van client naar server, server naar client of beide. Alle parameters in het prototype van de functie moeten worden gekoppeld aan directionele kenmerken. De drie mogelijke combinaties van directionele kenmerken zijn: 1) [in], 2) [], en 3) [in, uit]. Deze beschrijven de manier waarop parameters worden doorgegeven tussen aanroepen en aangeroepen procedures. Wanneer u compileert in de standaardmodus (microsoft-uitgebreide modus) en u een directioneel kenmerk weglaat voor een parameter, wordt door de MIDL-compiler uitgegaan van een standaardwaarde van [in].
De parameter [] moet een aanwijzer zijn. In feite is het kenmerk [out] niet zinvol wanneer het wordt toegepast op parameters die niet fungeren als aanwijzers omdat C-functieparameters worden doorgegeven door een waarde. In C ontvangt de aangeroepen functie een persoonlijke kopie van de parameterwaarde; de waarde van de aanroepende functie voor die parameter kan niet worden gewijzigd. Als de parameter echter fungeert als een aanwijzer, kan deze worden gebruikt om toegang te krijgen tot en het geheugen te wijzigen. Het kenmerk [out] geeft aan dat de serverfunctie de waarde moet retourneren aan de aanroepfunctie van de client en dat geheugen dat aan de aanwijzer is gekoppeld, moet worden geretourneerd overeenkomstig de kenmerken die aan de aanwijzer zijn toegewezen.
In de volgende interface ziet u de drie mogelijke combinaties van directionele kenmerken die kunnen worden toegepast op een parameter. De functie InOutProc- wordt gedefinieerd in het IDL-bestand als:
void InOutProc ([in] short s1,
[in, out] short * ps2,
[out] float * pf3);
De eerste parameter, s1, is [in] alleen. De waarde wordt verzonden naar de externe computer, maar wordt niet geretourneerd naar de aanroepende procedure. Hoewel de servertoepassing de waarde voor s1kan wijzigen, is de waarde van s1 op de client hetzelfde voor en na de aanroep.
De tweede parameter, ps2, wordt gedefinieerd in het prototype van de functie als een aanwijzer met de kenmerken [in] en [out] kenmerken. Het kenmerk [in] geeft aan dat de waarde van de parameter wordt doorgegeven van de client aan de server. Het kenmerk [out] geeft aan dat de waarde waarnaar wordt verwezen door ps2- naar de client wordt geretourneerd.
De derde parameter is [] alleen. Er wordt ruimte toegewezen voor de parameter op de server, maar de waarde is niet gedefinieerd bij de vermelding. Zoals hierboven vermeld, moeten alle parameters [] aanwijzen.
De externe procedure wijzigt de waarde van alle drie de parameters, maar alleen de nieuwe waarden van de parameters [out] en [in] parameters zijn beschikbaar voor de client.
#define MAX 257
void InOutProc(short s1,
short * ps2,
float * pf3)
{
*pf3 = (float) s1 / (float) *ps2;
*ps2 = (short) MAX - s1;
s1++; // in only; not changed on the client side
return;
}
Bij terugkeer van de aanroep naar InOutProc-worden de tweede en derde parameters gewijzigd. De eerste parameter, [in] is ongewijzigd.
parameters