Atributy pole
Mezi poli a ukazateli v jazyce C existuje blízký vztah. Při předání jako parametr funkce se název pole považuje za ukazatel na první prvek pole, jak je znázorněno v následujícím příkladu:
/* fragment */
extern void f1(char * p1);
void main(void)
{
char chArray[MAXSIZE];
fLocal1(chArray);
}
V místním volání můžete pomocí parametru ukazatele procházet paměť a zkoumat obsah jiných adres:
/* dump memory (fragment) */
void fLocal1(char * pch1)
{
int i;
for (i = 0; i < MAXSIZE; i++)
printf("%c ", *pch1++);
}
Když klient předá ukazatel vzdálenému postupu, předá zástupný kód klienta ukazatel i data, na která odkazuje. Pokud není ukazatel omezen na odpovídající data, musí být veškerá paměť klienta přenášena při každém vzdáleném volání. Vynucením silného psaní v definici rozhraní omezuje MIDL zpracování klientské zástupné procedury na data, která odpovídají zadanému ukazateli.
Velikost pole a rozsah prvků pole přenášených do vzdáleného počítače může být konstantní nebo proměnná. Pokud jsou tyto hodnoty proměnné, a proto jsou určeny za běhu, musíte použít atributy v souboru IDL určit, kolik prvků pole se má přenést. Následující atributy MIDL podporují hranice polí.
Atribut | Popis | Výchozí |
---|---|---|
[ first_is] | Index prvního prvku pole přenášeného. | 0 |
[ last_is] | Index posledního přenášeného prvku pole | - |
[ length_is] | Celkový počet přenášených prvků pole | - |
[ max_is] | Nejvyšší platná hodnota indexu pole. | - |
[ min_is] | Nejnižší platná hodnota indexu pole | 0 |
[ size_is] | Celkový počet prvků pole přidělených pro pole | - |
Poznámka
Atribut min_is není implementován v rpc. Minimální index pole se vždy považuje za nulu.