Freigeben über


Mehrere Zeigerebenen

Wenn mehrere Zeigerebenen vorhanden sind, werden die Attribute dem Zeiger zugeordnet, der dem Variablennamen am nächsten kommt. Der Client ist weiterhin für die Zuordnung von Arbeitsspeicher verantwortlich, der der Antwort zugeordnet ist.

Im folgenden Beispiel kann der Stub den Server aufrufen, ohne vorher zu wissen, wie viele Daten zurückgegeben werden:

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

In diesem Beispiel übergibt der Stub den Server einen eindeutigen Zeiger, der vom Server auf NULL-initialisiert wird. Der Server weist dann einen BARs-Block zu, legt den Zeiger fest, legt das Größenargument fest und gibt zurück. Beachten Sie, dass Sie einen [ref]-Zeiger an einen [eindeutigen] Zeiger an Ihre Daten übergeben müssen, damit der Server auswirkungen kann. Beachten Sie außerdem das Komma in [size_is( , *pSize )], das angibt, dass der Zeiger der obersten Ebene kein Zeiger der Größe ist, sondern dass der Zeiger der unteren Ebene ist.

Auf clientseitiger Seite legt der Stub *ppBar auf NULL- fest, bevor die Remoteprozedur aufgerufen wird. Der Stub ordnet dann die Rückstände von BAR-Objekten zu und entmarsen sie. Das Size-Argument gibt die Größe des Blocks an (und die Anzahl der nichtmarshalierten BARs). Der Client muss das zurückgegebene Array von BAR-Objekten freigeben, wenn es nicht mehr erforderlich ist.

size_is