Tampaknya objek COM adalah objek penggunaan umum yang diatur oleh OS. Objek mengikuti antarmuka yang ketat dan memungkinkan Anda untuk menanyakan objek untuk menentukan informasi. Apakah ini yang dimaksud dengan objek COM?
COM adalah mekanisme yang memungkinkan penggunaan kembali objek (atau lebih tepatnya komponen), terlepas dari bahasa yang digunakan oleh pemrogram yang mengimplementasikan komponen dan pemrogram yang menggunakannya, dan terlepas dari apakah komponen diimplementasikan dalam program klien atau di tempat lain di mesin (atau jaringan).
Secara garis besar, setiap komponen COM menyediakan implementasi dari satu atau lebih antarmuka. Antarmuka tersebut didefinisikan dengan bahasa netral menggunakan Bahasa Definisi Antarmuka (IDL) . Sebagai contoh, salah satu antarmuka dasar di COM, IUnknown , didefinisikan seperti ini:
interface IUnknown
{
virtual HRESULT QueryInterface(REFIID riid, void **ppvObject) = 0;
virtual ULONG AddRef(void) = 0;
virtual ULONG Release(void) = 0;
};
Antarmuka kecil ini sangat penting dalam COM, karena setiap komponen COM harus mengimplementasikannya. Ini mendefinisikan dua aspek penting dari mesin COM:
QueryInterface
memungkinkan kode panggilan untuk mendapatkan implementasi untuk antarmuka yang dikenal. Di COM, antarmuka direferensikan oleh GUID (juga dikenal sebagai Pengenal Antarmuka, IID). Jika suatu objek mengimplementasikan beberapa antarmuka, begitulah cara kode klien mendapatkan referensi ke masing-masing antarmuka tersebut. Ini bertindak sebagai semacam operator casting, jika Anda mau.AddRef()
dan Release()
menerapkan mekanisme manajemen memori untuk objek COM. Seperti namanya, model yang paling umum adalah mekanisme penghitungan referensi, di mana sebuah instance dihancurkan setelah klien terakhir merilis referensinya.Semua komponen COM terdaftar dengan sistem pada saat instalasi. Jika seorang programmer ingin menggunakan komponen tertentu, dia perlu:
CoCreateInstance()
). Anda dapat melihat di registri di bawah HKEY_CLASSES_ROOT\CLSID
: setiap GUID di sana (kemungkinan besar) ada pengenal untuk komponen atau antarmuka COM, dan entri di bawah kunci tersebut memberi tahu sistem bagaimana seharusnya instanciated.Mesin COM sangat kompleks. Misalnya, mengimplementasikan atau menggunakan komponen COM dalam C membutuhkan banyak pekerjaan, tetapi bahasa tingkat tinggi seperti Visual Basic telah melakukan banyak hal untuk memudahkan implementasi dan penggunaan komponen COM. Namun manfaatnya sangat nyata. Itu memungkinkan untuk menulis aplikasi dalam, katakanlah, Visual Basic, tetapi untuk tetap mengimplementasikan algoritma kinerja-kritis dalam C atau C ++ sebagai objek COM, yang dapat digunakan langsung dari kode VB. Sistem menangani argumen pemanggilan metode marshalling , meneruskannya melalui utas, proses, dan koneksi jaringan sesuai kebutuhan sehingga kode klien memiliki kesan menggunakan objek normal.
Banyak bagian dasar Windows didasarkan pada COM. Windows Explorer (pengelola file), misalnya, pada dasarnya adalah shell kosong. Ini mendefinisikan sekelompok COM Antarmuka untuk menavigasi dan menampilkan hierarki pohon, dan semua kode yang benar-benar menampilkan "Komputer Saya", drive, folder dan file adalah sebagai satu set komponen COM yang mengimplementasikan antarmuka tersebut.
Dengan munculnya .NET, COM perlahan-lahan menjadi usang.
COM adalah mekanisme yang dikembangkan untuk memungkinkan orang mendistribusikan binari yang dapat digunakan kembali bahkan jika pemanggil menggunakan compiler C ++ vendor lain atau (pada akhirnya) bahasa yang berbeda sama sekali.
Jika Anda ingin pengenalan yang baik tentang COM, baca Essential COM oleh Don Box .
sumber