Udostępnij za pomocą


Wiele poziomów wskaźników

Jeśli istnieje wiele poziomów wskaźników, atrybuty są skojarzone ze wskaźnikiem najbliżej nazwy zmiennej. Klient jest nadal odpowiedzialny za przydzielanie dowolnej pamięci skojarzonej z odpowiedzią.

Poniższy przykład umożliwia wywołanie serwera przez wycinkę bez wcześniejszego poznania ilości danych, które zostaną zwrócone:

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

W tym przykładzie wycinkowy przekazuje serwerowi unikatowy wskaźnik, który serwer inicjuje do null. Następnie serwer przydziela blok BARs, ustawia wskaźnik, ustawia argument rozmiaru i zwraca. Należy pamiętać, że aby serwer miał wpływ na obiekt wywołujący, należy przekazać wskaźnik [ref] do wskaźnika [unikatowy] do danych. Zwróć również uwagę na przecinek w [size_is( , *pSize )], który wskazuje, że wskaźnik najwyższego poziomu nie jest wskaźnikiem o rozmiarze, ale że wskaźnik niższego poziomu jest.

Po stronie klienta wycinków ustawia wartość *ppBar na null przed wywołaniem procedury zdalnej. Następnie wycinków przydziela i unmarshals arry obiektów BAR. Argument rozmiaru wskazuje rozmiar bloku (i liczbę niemarshalowanych BARs). Klient musi zwolnić zwracaną tablicę obiektów BAR, gdy nie jest już wymagana.

size_is