Sdílet prostřednictvím


Více úrovní ukazatelů

Pokud existuje více úrovní ukazatelů, atributy jsou přidruženy k ukazateli nejblíže k názvu proměnné. Klient je stále zodpovědný za přidělení jakékoli paměti přidružené k odpovědi.

Následující příklad umožňuje, aby zástupný procedura volala server, aniž by předem věděla, kolik dat se vrátí:

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

V tomto příkladu zástupný procedura předá serveru jedinečný ukazatel, který server inicializuje na NULL. Server pak přidělí blok bars, nastaví ukazatel, nastaví argument velikosti a vrátí. Mějte na paměti, že aby server měl vliv na volajícího, musíte předat ukazatel [odkaz] na [jedinečný] ukazatel na data. Všimněte si také čárky v [size_is( , *pSize )], což označuje, že ukazatel nejvyšší úrovně není ukazatel velikosti, ale že ukazatel nižší úrovně je.

Na straně klienta nastaví zástupný kód *ppBar na NULL před voláním vzdálené procedury. Zástupný procedura pak přiděluje a oddělí předčítání objektů BAR. Argument velikost označuje velikost bloku (a počet nesmažených žádostí o přijetí změn). Klient musí uvolnit vrácenou matici objektů BAR, pokud už není vyžadována.

size_is