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 terarah. Tiga kemungkinan kombinasi atribut arah adalah: 1) [dalam], 2) [keluar], dan 3) [di, ]. 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, pengkompilasi MIDL mengasumsikan nilai default [dalam].
Parameter [out] harus berupa penunjuk. Bahkan, atribut [out] tidak bermakna ketika diterapkan ke parameter yang tidak bertindak sebagai pointer karena parameter fungsi C diteruskan oleh nilai. Di C, fungsi yang disebut 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, adalah [dalam] saja. 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 pointer dengan atribut [di] 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 adalah [keluar] saja. Spasi dialokasikan untuk parameter di server, tetapi nilainya tidak ditentukan pada entri. Seperti disebutkan di atas, semua parameter [out] harus berupa pointer.
Prosedur jarak jauh mengubah nilai ketiga parameter, tetapi hanya nilai baru dari parameter [out] dan [dalam] 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 [dalam] saja, tidak berubah.