Referenciamutatók
A referenciamutatók a legegyszerűbb mutatók, és az ügyfélcsomópont által a legkisebb mértékű feldolgozást igénylik. Ha egy ügyfélprogram egy referenciamutatót egy távoli eljárásnak ad át, a referenciamutató mindig egy érvényes memóriablokk címét tartalmazza. A távoli eljárás befejeződésekor a rendszer továbbra is ugyanarra a memóriablokkra mutat. Ezeket a mutatókat főként referencia-szemantikák implementálásához használják, és lehetővé teszik a [ki] paraméterek használatát C-ben.
Az alábbi példában a mutató értéke nem változik a hívás során, bár a mutató által megjelölt címen lévő adatok tartalma változhat.
A referenciamutató a következő jellemzőkkel rendelkezik:
- Mindig érvényes tárolóra mutat, és soha nem rendelkezik a NULL értékkel.
- A hívás során soha nem változik, és mindig ugyanarra a tárterületre mutat a hívás előtt és után.
- A távoli eljárásból visszaadott adatok a meglévő tárolóba lesznek beírva.
- A referenciamutató által mutatott tár nem érhető el más mutatóval vagy a függvény bármely más nevével.
A [ref] attribútummal referenciamutatókat adhat meg a felületdefiníciókban, ahogyan az az alábbi példában is látható.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface RefPtrInterface
{
void RemoteFn([in, out, ref] char *pChar);
}
Ez a példa a pChar paramétert egy karakterre mutató mutatóként határozza meg, nem pedig karaktertömbként. Ez egy [ki] paraméter és egy referenciamutató, amely arra a memóriára mutat, amelyet a RemoteFn kiszolgálói rutin adatokkal fog kitölteni.