Sdílet prostřednictvím


Atributy pole a Sized-Pointer

MIDL poskytuje bohatou sadu funkcí pro předávání polí dat a ukazatelů na data. Pomocí těchto atributů můžete určit charakteristiky polí a více úrovní ukazatelů.

Atribut Zvyk
size_is Určuje velikost paměti, která se má přidělit pro ukazatele velikosti, ukazatele velikosti na ukazatele velikosti a jednorozměrná nebo multidimenzionální pole.
max_is Maximální hodnota indexu pole.
length_is Počet prvků pole, které se mají přenést.
first_is Index prvního prvku pole, který se má přenést.
last_is Vrátí index posledního prvku pole, který se má přenést.
řetězce Označuje, že jednorozměrná znaková, wchar_t, bajtová (nebo ekvivalentní) matice nebo ukazatel na takovou matici, je zpracována jako řetězec.
rozsah Určuje rozsah povolených hodnot pro argumenty nebo pole, jejichž hodnoty jsou nastaveny za běhu.

 

MIDL podporuje tři druhy ukazatelů: referenční ukazatele, jedinečné ukazatele a úplné ukazatele. Tyto ukazatele jsou určeny atributy ukazatele ref, jedinečnéa ptr.

Atribut ukazatele lze použít jako atribut typu; jako atribut pole, který se vztahuje na člena struktury, člena sjednocení nebo parametr; nebo jako atribut funkce, který se vztahuje na návratový typ funkce. Atribut ukazatele se také může zobrazit s klíčovým slovem pointer_default.

Pokud chcete parametru ukazatele povolit změnu hodnoty během vzdálené funkce, musíte zadat další úroveň nepřímých ukazatelů zadáním více deklarátorů ukazatelů. Explicitní atribut ukazatele použitý na parametr má vliv pouze na deklarátor ukazatele nejvíce vpravo pro parametr. Pokud v deklaraci parametru existuje více deklarátorů ukazatelů, ostatní deklarátory jsou ve výchozím nastavení atributem ukazatele určeném atributem pointer_default. Chcete-li použít různé atributy ukazatele na více deklarátorů ukazatelů, je nutné definovat přechodné typy, které určují explicitní atributy ukazatele.

Výchozí hodnoty Pointer-Attribute

Pokud není žádný atribut ukazatele přidružený k ukazateli, který je parametrem, předpokládá se, že se jedná o ukazatel ref ukazatel.

Pokud není žádný atribut ukazatele přidružený k ukazateli, který je členem struktury nebo sjednocení, kompilátor MIDL přiřadí atributy ukazatele pomocí následujících pravidel priority (1 je nejvyšší):

  1. Atributy explicitně použité u typu ukazatele
  2. Atributy explicitně použité u parametru ukazatele nebo člena
  3. Atribut pointer_default v souboru IDL, který definuje typ
  4. Atribut pointer_default v souboru IDL, který importuje typ
  5. ptr (režim osf); jedinečných (výchozí režim Microsoft RPC)

Při kompilaci souboru IDL ve výchozím režimu mohou importované soubory dědit atributy ukazatele z importu souborů. Tato funkce není dostupná při kompilaci pomocí přepínačeosf /. Další informace najdete v tématu importu .

Návratové typy funkcí

Ukazatel vrácený funkcí musí být jedinečným ukazatelem nebo úplným ukazatelem. Kompilátor MIDL hlásí chybu, pokud je výsledkem funkce odkazový ukazatel, a to buď explicitně, nebo ve výchozím nastavení. Vrácený ukazatel vždy označuje nové úložiště.

Funkce, které vracejí hodnotu ukazatele, mohou jako atribut funkce zadat atribut ukazatele. Pokud atribut ukazatele neexistuje, použije ukazatel výsledku funkce hodnotu zadanou jako atribut pointer_default.

Atributy ukazatele v definicích typů

Když zadáte atribut ukazatele na nejvyšší úrovni typedef příkaz, zadaný atribut se použije na deklarátor ukazatele podle očekávání. Pokud není zadán žádný atribut ukazatele, deklarátory ukazatele na nejvyšší úrovni příkazu typedef dědí typ atributu při použití.

DCE IDL neumožňuje explicitní použití stejného atributu ukazatele dvakrát – například v typedef deklaraci a seznamu atributů parametru. Pokud použijete výchozí režim kompilátoru MIDL (rozšíření Microsoftu), uvolní se toto omezení.

Diskuzi o použití polí a ukazatelů MIDL ve vzdálených voláních procedur naleznete v tématu Pole a ukazatele.