Pustaka COM

Setiap proses yang menggunakan COM harus menginisialisasi dan tidak menginisialisasi pustaka COM. Selain menjadi spesifikasi, COM juga menerapkan beberapa layanan penting di pustaka ini. Disediakan sebagai sekumpulan DLL dan EXE (terutama Ole32.dll dan Rpcss.exe) di Microsoft Windows, pustaka COM mencakup yang berikut ini:

  • Sejumlah kecil fungsi dasar yang memfasilitasi pembuatan aplikasi COM, baik klien maupun server. Untuk klien, COM menyediakan fungsi dasar untuk membuat objek. Untuk server, COM menyediakan sarana untuk mengekspos objek mereka.

  • Layanan pencari implementasi di mana COM menentukan, dari pengidentifikasi kelas unik (CLSID), server mana yang mengimplementasikan kelas tersebut dan di mana server tersebut berada. Layanan ini mencakup dukungan untuk tingkat tidak langsung, biasanya registri sistem, antara identitas kelas objek dan kemasan implementasi sehingga klien independen dari kemasan, yang dapat berubah di masa depan.

  • Prosedur jarak jauh transparan memanggil ketika objek berjalan di server lokal atau jarak jauh.

  • Mekanisme standar untuk memungkinkan aplikasi mengontrol bagaimana memori dialokasikan dalam prosesnya, terutama memori yang perlu diteruskan antara objek yang bekerja sama sehingga dapat dibebaskan dengan benar.

Untuk menggunakan layanan COM dasar, semua utas COM eksekusi di klien dan server di luar proses harus memanggil fungsi CoInitialize atau CoInitializeEx sebelum memanggil fungsi COM lainnya kecuali panggilan alokasi memori. CoInitializeEx menggantikan fungsi lain, menambahkan parameter yang memungkinkan Anda menentukan model utas utas: baik apartment-threaded atau free-threaded. Panggilan ke CoInitialize hanya mengatur model utas ke utas apartemen.

Aplikasi dokumen gabungan OLE memanggil fungsi OleInitialize, yang memanggil CoInitializeEx dan juga melakukan beberapa inisialisasi yang diperlukan untuk dokumen gabungan. Oleh karena itu, utas yang memanggil OleInitialize tidak dapat di-utas bebas. Untuk informasi tentang utas di klien dan server, lihat Proses, Utas, dan Apartemen.

Server dalam proses tidak memanggil fungsi inisialisasi karena sedang dimuat ke dalam proses yang telah melakukannya. Akibatnya, server dalam proses harus mengatur model threading mereka di registri di bawah kunci InprocServer32 . Untuk informasi terperinci tentang masalah utas di server dalam proses, lihat Masalah Utas Server Dalam Proses.

Penting juga untuk tidak menginisialisasi pustaka. Untuk setiap panggilan ke CoInitialize atau CoInitializeEx, harus ada panggilan yang sesuai untuk CoUninitialize. Untuk setiap panggilan ke OleInitialize, harus ada panggilan yang sesuai ke OleUninitialize.

Server dalam proses dapat mengasumsikan bahwa proses yang dimuat telah melakukan langkah-langkah ini.

Model Objek Komponen