Flera pekarnivåer

När det finns flera pekarnivåer associeras attributen med pekaren närmast variabelnamnet. Klienten ansvarar fortfarande för att allokera minne som är associerat med svaret.

I följande exempel kan stub anropa servern utan att veta i förväg hur mycket data som ska returneras:

[
    uuid( ...),
    version(3.3),
]
interface AnInterface
{
    HRESULT GetBars([out] long * pSize,
             [out, size_is( , *pSize)]
             BAR ** ppBar);//BAR type defined elsewhere
}

I det här exemplet skickar stub-filen en unik pekare som servern initierar för att NULL-. Servern allokerar sedan ett block med BAR:er, anger pekaren, anger storleksargumentet och returnerar. Observera att för att servern ska påverka anroparen måste du skicka en [referens] pekare till en [unik] pekare till dina data. Observera också kommatecknet i [size_is( , *pSize )], vilket indikerar att pekaren på den översta nivån inte är en storlekspekare, men att pekaren på lägre nivå är det.

På klientsidan anger stub *ppBar till NULL- innan fjärrproceduren anropas. Stub allokerar och avmarshalerar sedan arry för BAR-objekt. Storleksargumentet anger storleken på blocket (och antalet omarshalerade bars). Klienten måste frigöra den returnerade matrisen med BAR-objekt när den inte längre krävs.

size_is