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


Irányított (paraméter) attribútumok

Az irányattribútumok azt írják le, hogy az adatok az ügyfélről a kiszolgálóra, a kiszolgálóról az ügyfélre vagy mindkettőre továbbítva lesznek-e. A függvény prototípusának minden paraméterét irányattribútumokkal kell társítani. Az irányattribútumok három lehetséges kombinációja: 1) [], 2) [ki] és 3) [, ki]. Ezek azt írják le, hogyan adják át a paramétereket a hívás és az úgynevezett eljárások között. Ha az alapértelmezett (Microsoft által bővített) módban fordít, és kihagy egy iránytribútumot egy paraméterhez, a MIDL fordító a [alapértelmezett értékét feltételezi].

A [out] paraméternek mutatónak kell lennie. A [ki] attribútum valójában nem értelmezhető olyan paraméterekre alkalmazva, amelyek nem működnek mutatóként, mert a C függvény paramétereit az érték adja át. A C-ben a hívott függvény megkapja a paraméterérték privát másolatát; nem módosíthatja a hívó függvény értékét a paraméterhez. Ha azonban a paraméter mutatóként működik, a memória eléréséhez és módosításához használható. A [out] attribútum azt jelzi, hogy a kiszolgálói függvénynek vissza kell adnia az értéket az ügyfél hívó függvényének, és hogy a mutatóhoz társított memóriát a mutatóhoz rendelt attribútumoknak megfelelően kell visszaadni.

Az alábbi felület bemutatja a paraméterekre alkalmazható irányattribútumok három lehetséges kombinációját. Az InOutProc függvény az IDL-fájlban a következőképpen van definiálva:

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

Az első paraméter( s1) csak a [] paraméter. Értékét a rendszer a távoli számítógépre továbbítja, de nem adja vissza a hívási eljárásnak. Bár a kiszolgálóalkalmazás módosíthatja s1értékét, az ügyfélen s1 értéke megegyezik a hívás előtt és után.

A második paraméter, ps2, a függvény prototípusában mutatóként van definiálva, a [] és a [ki] attribútumokkal. A [] attribútum azt jelzi, hogy a paraméter értéke az ügyféltől a kiszolgálónak lesz átadva. A [out] attribútum azt jelzi, hogy a ps2 által által mutatott érték visszakerül az ügyfélhez.

A harmadik paraméter csak [ki] . A rendszer helyet foglal le a kiszolgáló paraméteréhez, de az érték nincs meghatározva a bejegyzéskor. Ahogy fentebb említettük, az összes [ki] paraméternek mutatónak kell lennie.

A távoli eljárás mindhárom paraméter értékét módosítja, de csak a [out] és a [in] paraméterek új értékei érhetők el az ügyfél számára.

#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;
}

Az InOutProc hívásából visszaérve a második és a harmadik paraméter módosul. Az első paraméter, amely csak] [] értéke, változatlan.

paraméterekben

paraméterek

helyszíni paraméterek