Aracılığıyla paylaş


Yönlü (Parametre) Öznitelikleri

Yön öznitelikleri, verilerin istemciden sunucuya, sunucudan istemciye veya her ikisine de iletilip aktarılmadığını açıklar. İşlev prototipindeki tüm parametreler yön öznitelikleriyle ilişkilendirilmelidir. Yönlü özniteliklerin üç olası bileşimi şunlardır: 1) [], 2) [] ve 3) [, dışarı]. Bunlar, parametrelerin çağrılan ve yordam olarak adlandırılan arasında nasıl geçirildiğini açıklar. Varsayılan (Microsoft-genişletilmiş mod) içinde derleyip bir parametre için yön özniteliğini atladığınızda, MIDL derleyicisi varsayılan olarak [] değerini varsayar.

[out] parametresi işaretçi olmalıdır. Aslında, [out] özniteliği, C işlevi parametreleri değere göre geçirildiğinden işaretçi işlevi yapmayan parametrelere uygulandığında anlamlı değildir. C'de, çağrılan işlev parametre değerinin özel bir kopyasını alır; bu parametre için çağıran işlevin değerini değiştiremez. Ancak parametre bir işaretçi işlevi görüyorsa belleğe erişmek ve bellekte değişiklik yapmak için kullanılabilir. [out] özniteliği, sunucu işlevinin değeri istemcinin çağırma işlevine döndürmesi gerektiğini ve işaretçiyle ilişkili belleğin işaretçiye atanan özniteliklere uygun olarak döndürülmesi gerektiğini belirtir.

Aşağıdaki arabirim, bir parametreye uygulanabilecek üç olası yönlü öznitelik birleşimini gösterir. InOutProc işlevi IDL dosyasında şu şekilde tanımlanır:

void InOutProc ([in]       short     s1,
                [in, out]  short *  ps2,
                [out]      float *  pf3);

s1 ilk parametre, yalnızca [] içinde. Değeri uzak bilgisayara iletilir, ancak çağırma yordamına döndürülür. Sunucu uygulaması s1için değerini değiştirebilir, ancak istemcideki s1 değeri çağrıdan önce ve sonra aynıdır.

ps2 ikinci parametre, işlev prototipinde hem []] hem de [] öznitelikleriniişaretçi olarak tanımlanır. [] özniteliği, parametrenin değerinin istemciden sunucuya geçirildiğini gösterir. [out] özniteliği, ps2 tarafından işaret edilen değerin istemciye döndürüldüğünü gösterir.

Üçüncü parametre yalnızca [out] parametresidir. Sunucudaki parametre için boşluk ayrılır, ancak değer girişte tanımlanmamıştır. Yukarıda belirtildiği gibi, tüm [] parametreleri işaretçi olmalıdır.

Uzak yordam üç parametrenin de değerini değiştirir, ancak istemci tarafından yalnızca [] ve [] parametrelerinin yeni değerleri kullanılabilir.

#define MAX 257

void InOutProc(short    s1,
               short * ps2,
               float * pf3)
{
    *pf3 = (float) s1 / (float) *ps2;
    *ps2 = (short) MAX - s1;
    s1++;  // in only; not changed on the client side
    return;
}

InOutProcçağrısından döndürülen ikinci ve üçüncü parametreler değiştirilir. Yalnızca [] içindeolan ilk parametre değiştirilmez.

Parametreleri

giden parametreleri