Detail Marshaling

Jika Anda menggunakan marshaling standar, COM menangani semua detail yang dijelaskan di sini untuk Anda. Namun, ada beberapa programmer yang membutuhkan detail ini dan bagi mereka yang tertarik dengan informasi yang mendasar. Marshaling adalah proses pengemasan dan pembukaan kemasan parameter sehingga panggilan prosedur jarak jauh dapat berlangsung.

Jenis parameter yang berbeda di-marshalasi dengan cara yang berbeda. Misalnya, marshaling parameter bilangan bulat hanya melibatkan penyalinan nilai ke dalam buffer pesan. (Meskipun dalam kasus sederhana ini, ada masalah seperti byte yang mengurutkan untuk menangani dalam panggilan lintas komputer.) Namun, marshaling array adalah proses yang lebih kompleks. Anggota array disalin dalam urutan tertentu sehingga sisi lain dapat merekonstruksi array dengan tepat. Saat pointer di-marshal, data yang ditujukan penunjuk disalin mengikuti aturan dan konvensi untuk menangani penunjuk berlapis dalam struktur. Ada fungsi unik untuk menangani marshaling setiap jenis parameter.

Dengan marshaling standar, proksi dan stub adalah sumber daya di seluruh sistem untuk antarmuka dan mereka berinteraksi dengan saluran melalui protokol standar. Marshaling standar dapat digunakan oleh antarmuka standar yang ditentukan COM dan oleh antarmuka kustom, sebagai berikut:

  • Dalam kasus sebagian besar antarmuka COM, proksi dan stub untuk marshaling standar adalah objek komponen dalam proses yang dimuat dari DLL di seluruh sistem yang disediakan oleh COM di Ole32.dll.
  • Dalam kasus antarmuka kustom, proksi dan stub untuk marshaling standar dihasilkan oleh perancang antarmuka, biasanya dengan MIDL. Proksi dan stub ini dikonfigurasi secara statis dalam registri, sehingga setiap klien potensial dapat menggunakan antarmuka kustom di seluruh batas proses. Proksi dan stub ini dimuat dari DLL yang terletak melalui registri sistem, menggunakan ID antarmuka (IID) untuk antarmuka kustom yang mereka marshal.
  • Alternatif untuk menggunakan MIDL untuk menghasilkan proksi dan stub untuk antarmuka kustom, pustaka jenis dapat dihasilkan sebagai gantinya dan sistem yang disediakan, mesin marshaling berbasis pustaka jenis akan membuat marshal antarmuka.

Sebagai alternatif untuk marshaling standar, antarmuka (standar atau kustom) dapat menggunakan marshaling kustom. Dengan marshaling kustom, objek secara dinamis mengimplementasikan proksi pada waktu proses untuk setiap antarmuka yang didukungnya. Untuk antarmuka tertentu, objek dapat memilih marshaling standar yang disediakan COM atau marshaling kustom. Pilihan ini dibuat oleh objek berdasarkan antarmuka demi antarmuka. Setelah pilihan dibuat untuk antarmuka tertentu, itu tetap berlaku selama masa pakai objek. Namun, satu antarmuka pada objek dapat menggunakan marshaling kustom sementara antarmuka lain menggunakan marshaling standar.

Marshaling kustom secara inheren unik untuk objek yang mengimplementasikannya. Ini menggunakan proksi yang diimplementasikan oleh objek dan disediakan untuk sistem berdasarkan permintaan pada waktu proses. Objek yang menerapkan marshaling kustom harus menerapkan antarmuka IMarshal , sedangkan objek yang mendukung marshaling standar tidak.

Jika Anda memutuskan untuk menulis antarmuka kustom, Anda harus memberikan dukungan marshaling untuk itu. Biasanya, Anda akan menyediakan DLL marshaling standar untuk antarmuka yang Anda desain. Anda dapat membuat kode proksi/stub dan DLL proksi/stub, atau Anda dapat membuat pustaka jenis yang akan digunakan COM untuk melakukan marshaling berbasis data (menggunakan data di pustaka jenis).

Agar klien melakukan panggilan ke metode antarmuka dalam objek dalam proses lain melibatkan kerja sama beberapa komponen. Proksi standar adalah bagian dari kode khusus antarmuka yang berada di ruang proses klien dan menyiapkan parameter antarmuka untuk transmisi. Ini mengemas, atau marshal, mereka singgah sehingga mereka dapat dibuat kembali dan dipahami dalam proses penerimaan. Stub standar, juga bagian dari kode khusus antarmuka, berada di ruang proses server dan membalikkan pekerjaan proksi. Stub unpackages, atau unmarshals, parameter yang dikirim dan meneruskannya ke aplikasi objek. Ini juga mengemas informasi balasan untuk dikirim kembali ke klien.

Catatan

Pembaca lebih akrab dengan RPC daripada COM dapat digunakan untuk melihat istilah stub klien dan stub server. Istilah-istilah ini dianalogikan dengan proksi dan stub.

 

Komponen Komunikasi Antarproseksi

Diagram berikut menunjukkan alur komunikasi antara komponen yang terlibat. Di sisi klien batas proses, panggilan metode klien melewati proksi dan kemudian ke saluran, yang merupakan bagian dari pustaka COM. Saluran mengirimkan buffer yang berisi parameter marshal ke pustaka run-time RPC, yang mengirimkannya ke seluruh batas proses. Run time RPC dan pustaka COM ada di kedua sisi proses. Perbedaan antara saluran dan run time RPC adalah karakteristik implementasi ini dan bukan bagian dari model pemrograman atau model konseptual untuk objek klien/server COM. Server COM hanya melihat proksi atau stub dan, secara tidak langsung, saluran. Implementasi di masa mendatang dapat menggunakan lapisan yang berbeda di bawah saluran atau tanpa lapisan.

Diagram that shows the Client.exe and Server.exe flows on each side fo the Process Boundary.

Channel

Komunikasi Antar Objek

Microsoft RPC

Proksi

Stub