Parametre Tanımlayıcıları
Daha önce belirtildiği gibi –Oi ve –Oif stili parametre tanımlayıcıları vardır.
–Oi Parametre Tanımlayıcıları
Tam olarak yorumlanan saptamalar, RPC çağrısındaki parametrelerin her biri için ek bilgi gerektirir. Yordamın parametre açıklamaları, yordamın açıklamasından hemen sonra gelir.
Parametre Tanımlayıcıları
[]açıklamasının veya dönüş basit tür parametresinin biçimi:
FC_IN_PARAM_BASETYPE
simple_type<1>
–veya–
FC_RETURN_PARAM_BASETYPE
simple_type<1>
burada simple_type<1> basit türü gösteren FC belirtecidir. Kodlar aşağıdaki gibidir:
4e FC_IN_PARAM_BASETYPE
53 FC_RETURN_PARAM_BASETYPE
Diğer –Oi
Parametre Tanımlayıcıları
Diğer tüm parametre türleri için açıklama biçimi şu şekildedir:
param_direction<1>
stack_size<1>
type_offset<2>
Burada, bu açıklamaların her biri için param_direction<1> alanı aşağıdaki tabloda gösterilenlerden biri olmalıdır.
Büyü | Bayrak | Anlam |
---|---|---|
4d | FC_IN_PARAM | In parametresi. |
50 | FC_IN_OUT_PARAM | Bir giriş/çıkış parametresi. |
51 | FC_OUT_PARAM | Out parametresi. |
52 | FC_RETURN_PARAM | Yordam dönüş değeri. |
4f | FC_IN_PARAM_NO_FREE_INST | Serbest bırakma yapılmayan bir parametre olarak xmit/rep içinde. |
stack_size<1>, parametrenin yığında kapsayılan tamsayı sayısı olarak ifade edilen yığındaki parametresinin boyutudur.
Not
–Oi modu 64 bit platformlarda desteklenmez.
type_offset<2> alanı, tür biçimi dize tablosundaki uzaklıktır ve bağımsız değişkenin tür tanımlayıcısını gösterir.
–Oif Parametre Tanımlayıcıları
Parametre açıklaması için biri temel türler, diğeri diğer tüm türler için olmak üzere iki olası biçim vardır.
Temel türler:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_format_char<1>
unused<1>
Diğer:
PARAM_ATTRIBUTES<2>
stack_offset<2>
type_offset<2>
Her iki stack_offset<2> de sanal bağımsız değişken yığınındaki uzaklığı bayt cinsinden gösterir. Temel türler için, bağımsız değişken türü doğrudan türe karşılık gelen biçim karakteri tarafından verilir. Diğer türler için type_offset<2> alanı, bağımsız değişkenin tür tanımlayıcısının bulunduğu tür biçimi dize tablosundaki uzaklığı verir.
Parametre özniteliği alanı aşağıdaki gibi tanımlanır:
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;
- MustSize biti yalnızca parametrenin boyutlandırılması gerekiyorsa ayarlanır.
- Sunucunun parametresinin NdrFree* yordamını çağırması gerekiyorsa MustFree biti ayarlanır.
- IsSimpleRef biti, başka bir işaretçi dışında herhangi bir öğeye başvuru işaretçisi olan ve ayırma özniteliği olmayan bir parametre için ayarlanır. Böyle bir tür için, parametre açıklamasının temel türe yönelik başvuru işaretçisi dışında type_offset<> alanı, başvuranın türüne uzaklığı sağlar; başvuru işaretçisi atlanır.
- IsDontCallFreeInst biti, ücretsiz örnek yordamları çağrılmaması gereken belirli represent_as parametreleri için ayarlanır.
- parametresi [], [] veya [in,out] işaretçisi veya enum16 işaretçisi ise ServerAllocSize bitleri sıfır değildir ve I_RpcAllocateçağrısı kullanmak yerine sunucu yorumlayıcısının yığınında başlatılır. Sıfır değilse, parametrenin bayt sayısını almak için bu değer 8 ile çarpılır. Bunun, işaretçi için her zaman en az 8 bayt ayrıldığı anlamına geldiğini unutmayın.
- IsBasetype biti, ana –Oif yorumlayıcı döngüsü tarafından sıralanan basit türler için ayarlanır. Özellikle, bir FC_RANGE belirteci kullanarak dağıtım aracılığıyla aralık yordamını hazırlamayı zorlamak için üzerinde range özniteliği olan basit bir tür temel tür olarak işaretlenmez.
- IsByValue biti, değer tarafından gönderilen bileşik türler için ayarlanır, ancak bağımsız değişkenin işaretçi olup olmadığına bakılmaksızın basit türler için ayarlanmaz. Ayarlandığı bileşik türler yapılar, birleşimler, transmit_as, represent_as, wire_marshal ve SAFEARRAY'dir. Genel olarak bit, –Oicf yorumlayıcıdaki ana yorumlayıcı döngüsünün avantajına yönelik olarak kullanıma sunulmuştur ve bu sayede nonsimple bağımsız değişkenlerin (bileşik tür bağımsız değişkenleri olarak adlandırılır) düzgün başvurulmadığından emin olun. Bu bit, yorumlayıcının önceki sürümlerinde hiç kullanılmamıştı.