Bagikan melalui


[masuk, keluar, size_is] Prototipe

Prototipe fungsi berikut menggunakan array karakter yang dihitung tunggal yang diteruskan dengan kedua cara: dari klien ke server dan dari server ke klien:

#define STRSIZE 500 //maximum string length

void Analyze(
    [in, out, length_is(*pcbSize), size_is(STRSIZE)] char  achInOut[],
    [in, out]  long *pcbSize);

Sebagai parameter [in], achInOut harus menunjuk ke penyimpanan yang valid di sisi klien. Pengembang mengalokasikan memori yang terkait dengan array di sisi klien sebelum melakukan panggilan prosedur jarak jauh.

Stub menggunakan parameter [size_is] strsize untuk mengalokasikan memori di server dan kemudian menggunakan parameter [length_is] pcbSize untuk mengirimkan elemen array ke dalam memori ini. Pengembang harus memastikan kode klien menetapkan variabel [length_is] sebelum memanggil prosedur jarak jauh.

Dalam beberapa situasi, menggunakan parameter terpisah alih-alih string tunggal untuk input dan output lebih efisien dan memberikan fleksibilitas. Ini ditunjukkan dalam contoh berikutnya:

/* client */ 
char achInOut[STRSIZE];
long cbSize;
...
gets_s(achInOut, STRSIZE);       // get patient input
cbSize = strlen(achInOut) + 1;   // transmit '\0' too
Analyze(achInOut, &cbSize);

Dalam contoh sebelumnya, array karakter achInOut juga digunakan sebagai parameter [out]. Di C, nama array setara dengan penggunaan pointer. Secara default, semua pointer tingkat atas adalah penunjuk referensi - mereka tidak berubah nilai dan mereka menunjuk ke area memori yang sama pada klien sebelum dan sesudah panggilan. Semua memori yang diakses prosedur jarak jauh harus sesuai dengan ukuran yang ditentukan klien sebelum panggilan, atau stub akan menghasilkan pengecualian.

Sebelum kembali, fungsi Analisis pada server harus mengatur ulang parameter pcbSize untuk menunjukkan jumlah elemen yang akan dikirimkan server ke klien seperti yang ditunjukkan:

/* server */ 
Analyze(char * str, long * pcbSize)
{
   ...
   *pcbSize = strlen(str) + 1; // transmit '\0' too
   return;
}