Dizi Özniteliklerini Birleştirme

Saplama, dizi boyutunu ve sunucuya iletilecek bayt sayısını belirlemek için bilgileri kullanabildiği sürece alan öznitelikleri çeşitli birleşimlerde sağlanabilir. Öznitelikler arasındaki ilişkiler aşağıdaki formüller kullanılarak tanımlanır:

size_is = max_is + 1;
length_is = last_is - first_is + 1;

Özniteliklerle ilişkili değerler, bu formülleri temel alan birçok sağduyu kuralına uymalıdır. Bu kurallar şunlardır:

  • Sıfırdan küçük bir [first_is] dizin değeri veya [max_is] değerinden büyük bir [last_is] değeri belirtmeyin.
  • Dizi için negatif boyut belirtmeyin. İlk ve son öğeleri, sıfır veya daha büyük bir uzunluk değeriyle sonuçlayacak şekilde tanımlayın. Boyutun sıfır veya daha büyük olması için [max_is] değerini tanımlayın. MIDL /error bounds_check seçeneğiyle çağrıldıysa, saplama boyutu sıfırdan küçük olduğunda veya iletilen uzunluk sıfırdan küçük olduğunda bir özel durum oluşturur.
  • [length_is] ve [last_is] özniteliklerini aynı anda veya [size_is] ve [last_is] özniteliklerini aynı anda kullanmayın.

Diziler ve işaretçiler arasındaki C'deki yakın ilişki nedeniyle MIDL, işaretçi gösterimini kullanarak parametre listelerinde dizileri bildirmenize de olanak tanır. MIDL, bir türe işaretçi olan bir parametreyi, parametrenin genellikle dizilerle ilişkili özniteliklerinden herhangi birine sahip olması durumunda bu türdeki bir dizi olarak ele alır.

/* IDL file */
[ 
  uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45)
  version(6.0) 
]
interface arraytest
{
  void fArray6([in] short sSize, 
               [in, out, size_is(sSize)] char * p1);
  void fArray7([in] short sSize, 
               [in, out, size_is(sSize)] char achArray[]);
}

Yukarıdaki örnekte, fArray6 ve fArray7 işlevlerindeki dizi ve işaretçi parametreleri eşdeğerdir.