Bagikan melalui


Beberapa Tingkat Pointer

Ketika ada beberapa tingkat pointer, atribut dikaitkan dengan penunjuk yang paling dekat dengan nama variabel. Klien masih bertanggung jawab untuk mengalokasikan memori apa pun yang terkait dengan respons.

Contoh berikut memungkinkan stub untuk memanggil server tanpa mengetahui terlebih dahulu berapa banyak data yang akan dikembalikan:

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

Dalam contoh ini, stub meneruskan server pointer unik, yang diinisialisasi server untuk NULL. Server kemudian mengalokasikan blok RS, mengatur penunjuk, mengatur argumen ukuran dan mengembalikan. Perhatikan bahwa agar server memiliki efek pada pemanggil, Anda harus meneruskan penunjuk [ref] ke penunjuk [unik] ke data Anda. Perhatikan juga koma di [size_is( , *pSize )], yang menunjukkan bahwa pointer tingkat atas bukan penunjuk berukuran, tetapi penunjuk tingkat bawah adalah.

Di sisi klien, stub mengatur *ppBar ke NULL sebelum memanggil prosedur jarak jauh. Stub kemudian mengalokasikan dan membatalkan amarshals arry objek BAR. Argumen ukuran menunjukkan ukuran blok (dan jumlah RS yang tidak dirusak). Klien harus membebaskan array objek BAR yang dikembalikan ketika tidak lagi diperlukan.

size_is