Bagikan melalui


Atribut Directional (Parameter)

Atribut arah menjelaskan apakah data dikirimkan dari klien ke server, server ke klien, atau keduanya. Semua parameter dalam prototipe fungsi harus dikaitkan dengan atribut arah. Tiga kemungkinan kombinasi atribut arah adalah: 1) [in], 2) [out], dan 3) [in, out]. Ini menjelaskan cara parameter diteruskan antara panggilan dan prosedur yang disebut. Saat Anda mengkompilasi dalam default (mode diperluas Microsoft) dan Anda menghilangkan atribut arah untuk parameter, kompilator MIDL mengasumsikan nilai default [in].

Parameter [out] harus berupa pointer. Bahkan, atribut [keluar] tidak bermakna ketika diterapkan pada parameter yang tidak bertindak sebagai penunjuk karena parameter fungsi C diteruskan oleh nilai. Di C, fungsi yang dipanggil menerima salinan privat dari nilai parameter; tidak dapat mengubah nilai fungsi panggilan untuk parameter tersebut. Namun, jika parameter bertindak sebagai penunjuk, parameter dapat digunakan untuk mengakses dan memodifikasi memori. Atribut [out] menunjukkan bahwa fungsi server harus mengembalikan nilai ke fungsi panggilan klien, dan memori yang terkait dengan pointer harus dikembalikan sesuai dengan atribut yang ditetapkan ke pointer.

Antarmuka berikut menunjukkan tiga kemungkinan kombinasi atribut arah yang dapat diterapkan ke parameter. Fungsi InOutProc didefinisikan dalam file IDL sebagai:

void InOutProc ([in]       short     s1,
                [in, out]  short *  ps2,
                [out]      float *  pf3);

Parameter pertama, s1, hanya [in]. Nilainya ditransmisikan ke komputer jarak jauh, tetapi tidak dikembalikan ke prosedur panggilan. Meskipun aplikasi server dapat mengubah nilainya untuk s1, nilai s1 pada klien sama sebelum dan sesudah panggilan.

Parameter kedua, ps2, didefinisikan dalam prototipe fungsi sebagai penunjuk dengan atribut [in] dan [out]. Atribut [in] menunjukkan bahwa nilai parameter diteruskan dari klien ke server. Atribut [out] menunjukkan bahwa nilai yang ditunjukkan oleh ps2 dikembalikan ke klien.

Parameter ketiga hanya [keluar]. Spasi dialokasikan untuk parameter di server, tetapi nilainya tidak ditentukan pada entri. Seperti disebutkan di atas, semua parameter [out] harus pointer.

Prosedur jarak jauh mengubah nilai ketiga parameter, tetapi hanya nilai baru parameter [out] dan [in] yang tersedia untuk klien.

#define MAX 257

void InOutProc(short    s1,
               short * ps2,
               float * pf3)
{
    *pf3 = (float) s1 / (float) *ps2;
    *ps2 = (short) MAX - s1;
    s1++;  // in only; not changed on the client side
    return;
}

Saat kembali dari panggilan ke InOutProc, parameter kedua dan ketiga dimodifikasi. Parameter pertama, yaitu [in] saja, tidak berubah.

dalam parameter

parameter out

parameter masuk