Menggunakan Array, String, dan Pointer

Program Dokter (lihat \samples\rpc\doctor di Platform Software Development Kit (SDK)) adalah contoh yang baik dari aplikasi yang menunjukkan trade-off desain yang terlibat dengan atribut array dan string. Program Dokter adalah versi sampel kecil dari program yang lebih dikenal, Eliza, yang dikembangkan oleh peneliti kecerdasan buatan Joseph Weizenbaum di MIT pada tahun 1960-an. Program ini menipotkan terapis dengan menggunakan pencocokan pola sederhana untuk merespons input bahasa alami.

Program Eliza merekam sesi berikut.

Pengguna Eliza
Pria semuanya sama. Dengan cara apa?
Mereka selalu mengganggu kita tentang sesuatu atau lainnya. Dapatkah Anda memikirkan contoh tertentu?
Nah, pacar saya membuat saya datang ke sini. Pacarmu membuatmu datang ke sini.
Dia bilang aku tertekan banyak waktu. Saya menyesal mendengar bahwa Anda depresi.
Memang benar, aku tidak bahagia. Apakah Anda pikir datang ke sini akan membantu Anda untuk tidak bahagia?
Aku butuh bantuan; yang tampaknya sangat pasti. Apa artinya jika kau dapat bantuan?
Mungkin aku bisa belajar untuk bergaul dengan ibuku. Ceritakan lebih banyak tentang keluargamu.
Ibuku menjagaku. Siapa lagi di keluargamu yang merawatmu?
Ayahku. Ayahmu.
Kau seperti ayahku dalam beberapa hal. Keseruan apa yang Anda lihat?

 

Program Dokter dapat dibagi menjadi aplikasi sisi klien dan sisi server. Pihak klien meminta input pasien dan menampilkan respons dokter. Sisi server memproses input pasien dan menghasilkan respons dokter. Ini adalah contoh klasik aplikasi server klien: klien bertanggung jawab atas interaksi pengguna saat server menangani beban komputasi yang luas. Tidak banyak data yang diteruskan ke dan dikembalikan oleh fungsi tetapi, karena data dapat memerlukan sejumlah besar pemrosesan, server memprosesnya.

Program Dokter menggunakan array karakter untuk input dan mengembalikan array karakter lain sebagai output. Tabel di bawah ini mencantumkan empat cara untuk meneruskan array karakter antara klien dan server, serta atribut dan fungsi yang diperlukan untuk mengimplementasikan setiap pendekatan.

Pendekatan Atribut atau fungsi
Array karakter yang dihitung [ size_is ] , [ length_is ] , [ ref ]
String yang dikelola stub [ string], [ ref], midl_user_allocate di server
String yang dikelola stub [ string], [ unik], midl_user_allocate di klien dan server
Fungsi yang mengembalikan string [ unik ]

 

Dalam batasan yang terkait dengan kombinasi atribut ini, ada cara alternatif untuk mengirim satu array karakter dari klien ke server dan mengembalikan array karakter lain dari server ke klien.

Topik berikut menunjukkan trade-off desain antara berbagai antarmuka yang dapat mengelola parameter ini.