QueryInterface
Meskipun ada mekanisme di mana objek dapat mengekspresikan fungsionalitas yang disediakannya secara statis (sebelum dibuat), mekanisme COM dasarnya adalah menggunakan metode yang IUnknown
disebut QueryInterface
.
Setiap antarmuka berasal dari IUnknown
, sehingga setiap antarmuka memiliki implementasi .QueryInterface
Terlepas dari implementasinya, metode ini mengkueri objek menggunakan IID
antarmuka tempat pemanggil menginginkan penunjuk. Jika objek mendukung antarmuka tersebut, QueryInterface
mengambil penunjuk ke antarmuka, sambil juga memanggil AddRef
. Jika tidak, kode kesalahan akan dikembalikan E_NOINTERFACE
.
Perhatikan bahwa Anda harus mematuhi aturan Penghitungan Referensi setiap saat. Jika Anda memanggil Release
penunjuk antarmuka untuk mengurangi jumlah referensi menjadi nol, Anda tidak boleh menggunakan penunjuk itu lagi. Terkadang Anda mungkin perlu mendapatkan referensi lemah ke objek (yaitu, Anda mungkin ingin mendapatkan penunjuk ke salah satu antarmukanya tanpa meningkatkan jumlah referensi), tetapi tidak dapat diterima untuk melakukan ini dengan memanggil QueryInterface
diikuti oleh Release
. Penunjuk yang diperoleh dengan cara seperti itu tidak valid dan tidak boleh digunakan. Ini lebih mudah menjadi jelas ketika _ATL_DEBUG_INTERFACES
didefinisikan, jadi menentukan makro ini adalah cara yang berguna untuk menemukan referensi menghitung bug.