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


Paraméterleírók

Ahogy korábban említettük, –Oi és –Oif stílusparaméter-leírók léteznek.

Az –Oi paraméterleírók

A teljes mértékben értelmezett csonkok további információkat igényelnek az RPC-hívások minden paraméteréhez. Az eljárás paraméterleírásai közvetlenül az eljárás leírása után következnek.

Egyszerű –Oi

paraméterleírók

Az [] leírásának formátuma vagy egyszerű típusparaméter visszaadása a következő:

FC_IN_PARAM_BASETYPE 
simple_type<1>

–vagy–

FC_RETURN_PARAM_BASETYPE 
simple_type<1>

Ahol simple_type<1> az egyszerű típust jelző FC-jogkivonat. A kódok a következők:

4e  FC_IN_PARAM_BASETYPE 
53  FC_RETURN_PARAM_BASETYPE

Egyéb –Oi

paraméterleírók

Az összes többi paramétertípus leírásának formátuma a következő:

param_direction<1> 
stack_size<1> 
type_offset<2>

Ahol az egyes leírások param_direction<1> mezőnek az alábbi táblázatban láthatóak egyikének kell lennie.

Rontás Zászló Jelentés
4d FC_IN_PARAM Egy in paraméter.
50 FC_IN_OUT_PARAM Egy be- és kimenő paraméter.
51 FC_OUT_PARAM Egy kimenő paraméter.
52 FC_RETURN_PARAM Egy eljárás visszaadott értéke.
4f FC_IN_PARAM_NO_FREE_INST Egy xmit/rep paraméter, amelynek nincs felszabadítása.

 

Az stack_size<1> a verem paraméterének mérete, a paraméter által a veremen elfoglalt egész számok számában kifejezve.

Jegyzet

Az –Oi mód nem támogatott a 64 bites platformokon.

 

A type_offset<2> mező a típusformátumú sztringtábla eltolása, amely az argumentum típusleírójának jelölését jelzi.

Az –Oif paraméterleírók

A paraméterek leírásának két lehetséges formátuma van, az egyik az alaptípusokhoz, a másik az összes többi típushoz.

Alaptípusok:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_format_char<1> 
unused<1>

Más:

PARAM_ATTRIBUTES<2> 
stack_offset<2> 
type_offset<2>

Mindkét stack_offset<2> a virtuális argumentumverem eltolását jelzi bájtban. Alaptípusok esetén az argumentumtípust közvetlenül a típusnak megfelelő formátum karakter adja meg. Más típusok esetén a type_offset<2> mező eltolást ad abban a típusformátumú sztringtáblában, ahol az argumentum típusleírója található.

A paraméterattribútum mező a következőképpen van definiálva:

typedef struct
  {
  unsigned short  MustSize            : 1;    // 0x0001
  unsigned short  MustFree            : 1;    // 0x0002
  unsigned short  IsPipe              : 1;    // 0x0004
  unsigned short  IsIn                : 1;    // 0x0008
  unsigned short  IsOut               : 1;    // 0x0010
  unsigned short  IsReturn            : 1;    // 0x0020
  unsigned short  IsBasetype          : 1;    // 0x0040
  unsigned short  IsByValue           : 1;    // 0x0080
  unsigned short  IsSimpleRef         : 1;    // 0x0100
  unsigned short  IsDontCallFreeInst  : 1;    // 0x0200
  unsigned short  SaveForAsyncFinish  : 1;    // 0x0400
  unsigned short  Unused              : 2;
  unsigned short  ServerAllocSize     : 3;    // 0xe000
  } PARAM_ATTRIBUTES, *PPARAM_ATTRIBUTES;
  • A MustSize bit csak akkor van beállítva, ha a paraméternek méretezhetőnek kell lennie.
  • A MustFree bit akkor van beállítva, ha a kiszolgálónak meg kell hívnia a paraméter NdrFree* rutinját.
  • Az IsSimpleRef bit egy olyan paraméterhez van beállítva, amely egy hivatkozásmutató más mutatótól eltérőre, és amely nem rendelkezik lefoglalási attribútumokkal. Ilyen típus esetén a paraméter leírásának type_offset<> mezője– az alaptípusra mutató hivatkozás kivételével – eltolást biztosít a hivatkozási típushoz; a referenciamutató egyszerűen ki van hagyva.
  • Az IsDontCallFreeInst bit olyan represent_as paraméterekhez van beállítva, amelyeknek az ingyenes példányok rutinjait nem szabad meghívni.
  • A ServerAllocSize bitek nem adhatók meg, ha a paraméter [ki], [], vagy [be,kifelé mutató] mutatót vagy enum16-ra mutató mutatót, és a kiszolgáló értelmezőjének veremén inicializálódik, és nem a I_RpcAllocatehívását használja. Ha nem, akkor ez az érték 8-tal megszorozva jelenik meg a paraméter bájtjainak számához. Vegye figyelembe, hogy ez azt jelenti, hogy a mutatóhoz mindig legalább 8 bájt van lefoglalva.
  • Az IsBasetype bit olyan egyszerű típusokhoz van beállítva, amelyeket a fő –Oif értelmező hurok hoz létre. A tartományattribútummal rendelkező egyszerű típus nem lesz alaptípusként megjelölve annak érdekében, hogy a tartomány rutinszerű marsallálását kényszerítse ki egy FC_RANGE jogkivonat használatával.
  • Az IsByValue bit érték szerint küldött összetett típusokhoz van beállítva, de az egyszerű típusok esetében nincs beállítva, függetlenül attól, hogy az argumentum mutató-e. Az összetett típusok, amelyekhez be van állítva, struktúrák, uniók, transmit_as, represent_as, wire_marshal és SAFEARRAY. A bitet általában a –Oicf értelmező fő értelmezőhurok javára vezették be, hogy a nem egybesimuló argumentumok (más néven összetett típusú argumentumok) megfelelően legyenek elhatárolva. Ezt a bitet soha nem használták az értelmező korábbi verzióiban.