Objek Kelas COM dan CLSID

Server COM diimplementasikan sebagai kelas COM. Kelas COM adalah implementasi dari sekelompok antarmuka dalam kode yang dijalankan setiap kali Anda berinteraksi dengan objek tertentu. Ada perbedaan penting antara kelas C++ dan kelas COM: Di C++, kelas adalah jenis, sementara kelas COM hanyalah definisi objek dan tidak membawa jenis, meskipun programmer C++ mungkin mengimplementasikannya dengan menggunakan kelas C++. COM dirancang untuk memungkinkan kelas digunakan oleh aplikasi yang berbeda, termasuk aplikasi yang ditulis tanpa pengetahuan tentang keberadaan kelas tertentu. Oleh karena itu, kode kelas untuk jenis objek tertentu ada baik di pustaka tertaut dinamis (DLL) atau di aplikasi lain yang dapat dieksekusi (EXE).

Setiap kelas COM diidentifikasi oleh CLSID, GUID 128-bit unik, yang harus didaftarkan server. COM menggunakan CLSID ini, atas permintaan klien, untuk mengaitkan data tertentu dengan DLL atau EXE yang berisi kode yang mengimplementasikan kelas, sehingga membuat instans objek.

Untuk klien dan server di komputer yang sama, CLSID server adalah semua yang pernah dibutuhkan klien. Di setiap komputer, COM mempertahankan database (menggunakan registri sistem pada platform Microsoft Windows dan Macintosh) dari semua CLSID untuk server yang diinstal pada sistem. Ini adalah pemetaan antara setiap CLSID dan lokasi DLL atau EXE yang menampung kode untuk CLSID tersebut. COM berkonsultasi dengan database ini setiap kali klien ingin membuat instans kelas COM dan menggunakan layanannya, sehingga klien tidak perlu mengetahui lokasi absolut kode di komputer.

Untuk sistem terdistribusi, COM menyediakan entri registri yang memungkinkan server jarak jauh mendaftarkan dirinya untuk digunakan oleh klien. Meskipun aplikasi hanya perlu tahu CLSID server, karena mereka dapat mengandalkan registri untuk menemukan server, COM memungkinkan klien untuk mengambil alih entri registri dan menentukan lokasi server, untuk memanfaatkan jaringan sepenuhnya. (Lihat Menemukan Objek Jarak Jauh.)

Cara dasar untuk membuat instans kelas adalah melalui objek kelas COM. Ini hanyalah objek perantara yang mendukung fungsi umum untuk membuat instans baru dari kelas tertentu. Sebagian besar objek kelas yang digunakan untuk membuat objek dari CLSID mendukung antarmuka IClassFactory, antarmuka yang mencakup metode CreateInstance penting. Anda menerapkan antarmuka IClassFactory untuk setiap kelas objek yang Anda tawarkan untuk diinstansiasi. (Untuk informasi selengkapnya tentang penerapan IClassFactory, lihat Menerapkan IClassFactory.)

Catatan

Server yang mendukung beberapa antarmuka pabrik kelas kustom lainnya tidak diperlukan untuk mendukung IClassFactory secara khusus. Namun, panggilan ke fungsi aktivasi selain CoGetClassObject (seperti CoCreateInstanceEx) mengharuskan server mendukung IClassFactory.

 

Ketika klien ingin membuat instans objek server, klien menggunakan CLSID objek yang diinginkan dalam panggilan ke CoGetClassObject. (Panggilan ini dapat langsung atau implisit, melalui salah satu fungsi pembantu pembuatan objek.) Fungsi ini menemukan kode yang terkait dengan CLSID, dan membuat objek kelas, dan menyediakan pointer ke antarmuka yang diminta. (CoGetClassObject mengambil param riid yang menentukan penunjuk antarmuka yang diinginkan klien.)

Catatan

COM hanya memiliki beberapa fungsi di mana banyak dari yang lain dibangun. Yang paling penting dari ini mungkin adalah CoGetClassObject, yang mendasar semua fungsi pembuatan instans.

 

Dengan penunjuk ini, pemanggil dapat membuat instans objek dan mengambil penunjuk ke antarmuka yang diminta pada objek. Ini biasanya merupakan antarmuka inisialisasi, digunakan untuk mengaktifkan objek (meletakkannya dalam status berjalan) sehingga klien dapat melakukan pekerjaan apa pun dengan objek yang diinginkannya. Dengan menggunakan fungsi dasar COM, klien juga harus berhati-hati untuk merilis semua penunjuk objek.

Mekanisme lain untuk mengaktifkan instans objek adalah melalui moniker kelas. Moniker kelas mengikat objek kelas kelas tempat mereka dibuat. Untuk informasi selengkapnya, lihat Monikers Kelas.

COM menyediakan beberapa fungsi pembantu yang mengurangi pekerjaan pembuatan instans objek. Ini dijelaskan dalam Fungsi Pembantu Pembuatan Instans.

Membuat Objek Melalui Objek Kelas