Parameterbeskrivningar
Som tidigare nämnts finns –Oi och –Oif parameterbeskrivningar.
Parameterbeskrivningar för -Oi
Fullständigt tolkade stubs kräver ytterligare information för var och en av parametrarna i ett RPC-anrop. Parameterbeskrivningarna för en procedur följer omedelbart efter beskrivningen av proceduren.
parameterbeskrivningar
Formatet för beskrivningen av en [i] eller returnera enkel typparameter är:
FC_IN_PARAM_BASETYPE
simple_type<1>
–eller–
FC_RETURN_PARAM_BASETYPE
simple_type<1>
Där simple_type<1> är FC-token som anger den enkla typen. Koderna är följande:
4e FC_IN_PARAM_BASETYPE
53 FC_RETURN_PARAM_BASETYPE
Other –Oi
parameterbeskrivningar
Formatet för beskrivningen för alla andra parametertyper är:
param_direction<1>
stack_size<1>
type_offset<2>
Om fältet param_direction<1> för var och en av dessa beskrivningar måste vara ett av dem som visas i följande tabell.
Hex | Flagga | Betydelse |
---|---|---|
4d | FC_IN_PARAM | En i-parameter. |
50 | FC_IN_OUT_PARAM | En in-/ut-parameter. |
51 | FC_OUT_PARAM | En out-parameter. |
52 | FC_RETURN_PARAM | Ett procedurreturvärde. |
4f | FC_IN_PARAM_NO_FREE_INST | En i xmit/rep som en parameter för vilken ingen frigöring görs. |
stack_size<1> är storleken på parametern i stacken, uttryckt som antalet heltal som parametern upptar på stacken.
Not
Läget –Oi stöds inte på 64-bitarsplattformar.
Fältet type_offset<2> är förskjutningen i strängtabellen för typformat, vilket anger typbeskrivningen för argumentet.
Parameterbeskrivningar för -Oif
Det finns två möjliga format för en parameterbeskrivning, en för bastyper, en annan för alla andra typer.
Bastyper:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_format_char<1>
unused<1>
Annan:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_offset<2>
I båda stack_offset<2 anger> förskjutningen på den virtuella argumentstacken i byte. För bastyper anges argumenttypen direkt av det formattecken som motsvarar typen. För andra typer ger fältet type_offset<2> förskjutningen i strängtabellen för typformat där typbeskrivningen för argumentet finns.
Parameterattributfältet definieras på följande sätt:
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;
- Den MustSize bit anges endast om parametern måste vara storleksanpassad.
- MustFree- bit anges om servern måste anropa parameterns NdrFree*-rutin.
- IsSimpleRef bit anges för en parameter som är en referenspekare till något annat än en annan pekare och som inte har några allokeringsattribut. För en sådan typ ger parameterbeskrivningens type_offset<> fält, förutom en referenspekare till en bastyp, förskjutningen till referenstypen. referenspekaren hoppas helt enkelt över.
- IsDontCallFreeInst- bit har angetts för vissa represent_as parametrar vars rutiner för fri instans inte ska anropas.
- ServerAllocSize- bitar är icke-zero om parametern är [ut], [i], eller [in,ut] pekare till pekare eller pekare till uppräkning16 och initieras på servertolkstacken i stället för att använda ett anrop till I_RpcAllocate. Om det inte är noll multipliceras det här värdet med 8 för att hämta antalet byte för parametern. Observera att detta innebär att minst 8 byte alltid allokeras för en pekare.
- IsBasetype bit har angetts för enkla typer som konverteras av huvud-–Oif tolkslinga. I synnerhet flaggas inte en enkel typ med ett intervallattribut som bastyp för att tvinga intervallrutinen att konvertera genom att skicka med hjälp av en FC_RANGE token.
- IsByValue bit anges för sammansatta typer som skickas med värde, men är inte inställt för enkla typer, oavsett om argumentet är en pekare. De sammansatta typer som den har angetts för är strukturer, fackföreningar, transmit_as, represent_as, wire_marshal och SAFEARRAY. I allmänhet introducerades biten till förmån för huvudtolkningsloopen i –Oicf tolk, för att säkerställa att argumenten för icke-användning (kallas sammansatta typargument) är korrekt avrefererade. Den här biten användes aldrig i tidigare versioner av tolken.