Sdílet prostřednictvím


Variabilní pole

V MIDL jsou různá pole pevná ve velikosti. Umožňují klientům předávat různé části polí z klientů na servery. Velikost části pole se může lišit při každém vyvolání. Velikost celkového pole je ale pevná.

Následující příklad například ukazuje definici vzdálené procedury v rozhraní v souboru MIDL. Velikost pole, které klient předává na server, je pevná konstantou ARRAY_SIZE. Rozhraní určuje část pole, kterou klient předává serveru v parametrech firstElement a chunkSize.

[
    /*Attributes are defined here. */
]
interface MyInterface
{
    const long ARRAY_SIZE = 1000;

    MyRemoteProc(
        [in] long lFirstElement,
        [in] long lChunkSize,
        [in, first_is(lFirstElement), 
          length_is(lChunkSize)] char achArray[ARRAY_SIZE]
    );

    /* Other interface procedures are defined here. */
}

Definice rozhraní používá atribut MIDL [first_is] k určení indexu číslo prvního prvku v části pole, kterou klient předává na server. Atribut [length_is] určuje celkový počet prvků pole, které klient předává. Další informace o těchto MIDL atributech naleznete v tématu Array Attributes.

Následující fragment kódu ukazuje, jak může klient vyvolat vzdálenou proceduru definovanou v předchozím souboru MIDL.

long lFirstArrayElementNumber = 20;
long lTotalElementsPassed = 100;
char achCharArray[ARRAY_SIZE];

// Code to store chars in the array goes here.

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

firstArrayElementNumber = 120;
totalElementsPassed = 200;

MyRemoteProc(
    lFirstArrayElementNumber ,
    lTotalElementsPassed , 
    achCharArray);

Tento fragment volá vzdálenou proceduru MyRemoteProc dvakrát. Při prvním vyvolání předá prvky pole číslovaných 20 až 119, jak naznačují hodnoty v proměnných firstArrayElementNumber a totalElementsPassed. Během druhého volání klient předá prvky pole číslované 120 až 319.