Bagikan melalui


Beberapa Tingkat Pointer

Ketika ada beberapa tingkat pointer, atribut dikaitkan dengan pointer 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 ke NULL. Server kemudian mengalokasikan blok BAR, mengatur penunjuk, mengatur argumen ukuran dan pengembalian. Perhatikan bahwa agar server memiliki efek pada pemanggil, Anda harus meneruskan penunjuk [ref] ke penunjuk [unik] ke data Anda. Perhatikan juga koma dalam [size_is( , *pSize )], yang menunjukkan bahwa penunjuk tingkat atas bukan penunjuk berukuran, tetapi penunjuk tingkat bawah adalah.

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

size_is