Megosztás a következőn keresztül:


Tömb- és Sized-Pointer attribútumok

A MIDL számos funkciót kínál az adatok tömbjeinek és mutatóinak adathoz való továbbításához. Ezekkel az attribútumokkal megadhatja a tömbök jellemzőit és több mutatószintet.

Attribútum Használat
size_is Megadja a méretes mutatókhoz, a méretes mutatókhoz és az egy- vagy többdimenziós tömbökhöz lefoglalandó memória mennyiségét.
max_is A tömbindex maximális értéke.
length_is Az továbbítandó tömbelemek száma.
first_is Az első továbbítandó tömbelem indexe.
last_is Az utolsó továbbítandó tömbelem indexét adja meg.
sztring Azt jelzi, hogy az egydimenziós karakter, wchar_t, bájtos (vagy azzal egyenértékű) tömböt vagy az ilyen tömbre mutató mutatót sztringként kell kezelni.
tartomány Olyan argumentumok vagy mezők engedélyezett értékeinek tartományát adja meg, amelyek értékei futásidőben vannak beállítva.

 

A MIDL háromféle mutatót támogat: referenciamutatókat, egyedi mutatókat és teljes mutatókat. Ezeket a mutatókat a mutatóattribútumok ref, egyediés ptradhatók meg.

A mutatóattribútum típusattribútumként alkalmazható; egy struktúratagra, szakszervezeti tagra vagy paraméterre vonatkozó mezőattribútumként; vagy függvényattribútumként, amely a függvény visszatérési típusára vonatkozik. A mutatóattribútum a pointer_default kulcsszóval is megjeleníthető.

Ahhoz, hogy egy mutatóparaméter egy távoli függvény során megváltozhasson az értékben, több mutatódeklarátort kell megadnia egy másik indirekt szinttel. A paraméterre alkalmazott explicit mutatóattribútum csak a paraméter jobb szélső mutatódeklarátorára van hatással. Ha egy paraméterdeklarációban több mutatódeklarátor is szerepel, a többi deklarátor alapértelmezés szerint a pointer_default attribútum által megadott mutatóattribútumot használja. Ha különböző mutatóattribútumokat szeretne alkalmazni több mutatódeklarátorra, meg kell határoznia az explicit mutatóattribútumokat meghatározó köztes típusokat.

Alapértelmezett Pointer-Attribute értékek

Ha egy paramétert tartalmazó mutatóhoz nincs társítva mutatóattribútum, a rendszer feltételezi, hogy a mutató egy ref mutató.

Ha nincs mutatóattribútum társítva egy struktúra vagy egy unió tagjaként, a MIDL-fordító a következő prioritási szabályok használatával rendeli hozzá a mutatóattribútumokat (1 a legmagasabb):

  1. A mutatótípusra explicit módon alkalmazott attribútumok
  2. A mutatóparaméterre vagy tagra explicit módon alkalmazott attribútumok
  3. A típust meghatározó IDL-fájl pointer_default attribútuma
  4. A típust importáló IDL-fájl pointer_default attribútuma
  5. ptr (osf mód); egyedi (alapértelmezett Microsoft RPC mód)

Ha az IDL-fájl fordítása alapértelmezett módban történik, az importált fájlok örökölhetik a mutatóattribútumokat a fájlok importálásából. Ez a funkció nem érhető el a /osf kapcsolóval történő fordításkor. További információ: importálási.

Függvény visszatérési típusai

A függvény által visszaadott mutatónak egyedi mutatónak vagy teljes mutatónak kell lennie. A MIDL-fordító hibát jelez, ha egy függvény eredménye hivatkozási mutató, explicit módon vagy alapértelmezés szerint. A visszaadott mutató mindig új tárterületet jelez.

A mutatóértéket visszaadó függvények megadhatnak egy mutatóattribútumot függvényattribútumként. Ha nincs mutatóattribútum, a függvényeredmény-mutató a pointer_default attribútumként megadott értéket használja.

Mutatóattribútumok a típusdefiníciókban

Amikor egy mutatóattribútumot ad meg egy typedef utasítás felső szintjén, a megadott attribútum a várt módon lesz alkalmazva a mutatódeklarátorra. Ha nincs megadva mutatóattribútum, a typedef utasítás felső szintjén lévő mutatódeklarátorok öröklik a mutatóattribútum típusát használatkor.

A DCE IDL nem teszi lehetővé, hogy ugyanazt a mutatóattribútumot explicit módon alkalmazza kétszer – például a typedef deklarációban és a paraméterattribútumok listájában. Ha a MIDL-fordító alapértelmezett (Microsoft-bővítmények) üzemmódját használja, ez a korlátozás enyhül.

A MIDL-tömbök és -mutatók távoli eljáráshívásokban való használatáról a Tömbök és mutatókcímű témakörben olvashat.