Menginisialisasi Pustaka COM

Setiap program Windows yang menggunakan COM harus menginisialisasi pustaka COM dengan memanggil fungsi CoInitializeEx. Setiap utas yang menggunakan antarmuka COM harus melakukan panggilan terpisah ke fungsi ini. CoInitializeEx memiliki tanda tangan berikut:

HRESULT CoInitializeEx(LPVOID pvReserved, DWORD dwCoInit);

Parameter pertama dicadangkan dan harus NULL. Parameter kedua menentukan model utas yang akan digunakan program Anda. COM mendukung dua model utas yang berbeda, utas apartemen dan utas multithreaded. Jika Anda menentukan apartment threading, Anda membuat jaminan berikut:

  • Anda akan mengakses setiap objek COM dari satu utas; Anda tidak akan berbagi penunjuk antarmuka COM di antara beberapa utas.
  • Thread dalam konteks pemrograman akan memiliki loop pesan. (Lihat Pesan Jendela dalam Modul 1.)

Jika salah satu batasan ini tidak benar, gunakan model multithreaded. Untuk menentukan model utas, atur salah satu bendera berikut dalam parameter dwCoInit .

Bendera Deskripsi
COINIT_APARTMENTTHREADED Utas apartemen.
COINIT_MULTITHREADED Multibenang

 

Anda harus menetapkan tepat salah satu penanda ini. Umumnya, utas yang membuat jendela harus menggunakan flag COINIT_APARTMENTTHREADED, dan utas yang lain harus menggunakan COINIT_MULTITHREADED. Namun, beberapa komponen COM memerlukan model utas tertentu.

Catatan

Sebenarnya, bahkan jika Anda mendefinisikan utas apartemen, masih mungkin untuk berbagi antarmuka antar utas dengan memanfaatkan teknik yang disebut marshaling. Marshaling berada di luar cakupan modul ini. Poin pentingnya adalah bahwa dalam sistem utas apartemen, Anda tidak boleh asal menyalin pointer dari antarmuka ke utas lain. Untuk informasi selengkapnya tentang model utas COM, lihat Proses, Utas, dan Apartemen.

 

Selain bendera yang sudah disebutkan, ada baiknya untuk mengatur bendera COINIT_DISABLE_OLE1DDE dalam parameter dwCoInit . Mengatur penanda ini mengurangi overhead yang terkait dengan Object Linking and Embedding (OLE) 1.0, teknologi yang sudah usang.

Berikut adalah cara Anda akan menginisialisasi COM untuk pemrosesan apartment threading:

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);

Tipe pengembalian HRESULT berisi kode kesalahan atau keberhasilan. Kita akan melihat penanganan kesalahan COM di bagian berikutnya.

Menghentikan inisialisasi Pustaka COM

Untuk setiap panggilan yang berhasil ke CoInitializeEx, Anda harus memanggil CoUninitialize sebelum utas keluar. Fungsi ini tidak mengambil parameter dan tidak memiliki nilai pengembalian.

CoUninitialize();

Berikutnya

Kode Kesalahan di COM