Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kelas ini menyediakan implementasi IServiceProvider default antarmuka.
Sintaks
template <class T>
class ATL_NO_VTABLE IServiceProviderImpl : public IServiceProvider
Parameter
T
Kelas Anda, berasal dari IServiceProviderImpl.
Anggota
Metode Publik
| Nama | Deskripsi |
|---|---|
| IServiceProviderImpl::QueryService | Membuat atau mengakses layanan yang ditentukan dan mengembalikan penunjuk antarmuka ke antarmuka yang ditentukan untuk layanan. |
Keterangan
Antarmuka IServiceProvider menemukan layanan yang ditentukan oleh GUID-nya dan mengembalikan penunjuk antarmuka untuk antarmuka yang diminta pada layanan. Kelas IServiceProviderImpl menyediakan implementasi default antarmuka ini.
IServiceProviderImpl menentukan satu metode: QueryService, yang membuat atau mengakses layanan yang ditentukan dan mengembalikan penunjuk antarmuka ke antarmuka yang ditentukan untuk layanan.
IServiceProviderImpl menggunakan peta layanan, dimulai dengan BEGIN_SERVICE_MAP dan diakhir dengan END_SERVICE_MAP.
Peta layanan berisi dua entri: SERVICE_ENTRY, yang menunjukkan id layanan (SID) tertentu yang didukung oleh objek, dan SERVICE_ENTRY_CHAIN, yang memanggil QueryService untuk menautkan ke objek lain.
Hierarki Warisan
IServiceProvider
IServiceProviderImpl
Persyaratan
Header: atlcom.h
IServiceProviderImpl::QueryService
Membuat atau mengakses layanan yang ditentukan dan mengembalikan penunjuk antarmuka ke antarmuka yang ditentukan untuk layanan.
STDMETHOD(QueryService)(
REFGUID guidService,
REFIID riid,
void** ppvObject);
Parameter
guidService
[di] Penunjuk ke pengidentifikasi layanan (SID).
riid
[di] Pengidentifikasi antarmuka tempat pemanggil mendapatkan akses.
ppvObj
[out] Penunjuk tidak langsung ke antarmuka yang diminta.
Tampilkan Nilai
Nilai HRESULT yang dikembalikan adalah salah satu dari yang berikut ini:
| Nilai hasil | Makna |
|---|---|
| S_OK | Layanan berhasil dibuat atau diambil. |
| E_INVALIDARG | Satu atau beberapa argumen tidak valid. |
| E_OUTOFMEMORY | Memori tidak cukup untuk membuat layanan. |
| E_UNEXPECTED | Terjadi kesalahan yang tidak diketahui. |
| E_NOINTERFACE | Antarmuka yang diminta bukan bagian dari layanan ini, atau layanan tidak diketahui. |
Keterangan
QueryService mengembalikan pointer tidak langsung ke antarmuka yang diminta dalam layanan yang ditentukan. Pemanggil bertanggung jawab untuk merilis pointer ini ketika tidak lagi diperlukan.
Saat Anda memanggil QueryService, Anda meneruskan pengidentifikasi layanan (guidService) dan pengidentifikasi antarmuka (riid). GuidService menentukan layanan yang ingin Anda akses, dan riid mengidentifikasi antarmuka yang merupakan bagian dari layanan. Sebagai gantinya, Anda menerima penunjuk tidak langsung ke antarmuka.
Objek yang mengimplementasikan antarmuka mungkin juga mengimplementasikan antarmuka yang merupakan bagian dari layanan lain. Pertimbangkan hal berikut:
Beberapa antarmuka ini mungkin bersifat opsional. Tidak semua antarmuka yang ditentukan dalam deskripsi layanan selalu ada pada setiap implementasi layanan atau pada setiap objek yang dikembalikan.
Tidak seperti panggilan ke
QueryInterface, meneruskan pengidentifikasi layanan yang berbeda tidak selalu berarti bahwa objek Model Objek Komponen (COM) yang berbeda dikembalikan.Objek yang dikembalikan mungkin memiliki antarmuka tambahan yang bukan bagian dari definisi layanan.
Dua layanan yang berbeda, seperti SID_SMyService dan SID_SYourService, keduanya dapat menentukan penggunaan antarmuka yang sama, meskipun implementasi antarmuka mungkin tidak memiliki kesamaan antara kedua layanan. Ini berfungsi, karena panggilan ke QueryService (SID_SMyService, IID_IDispatch) dapat mengembalikan objek yang berbeda dari QueryService (SID_SYourService, IID_IDispatch). Identitas objek tidak diasumsikan ketika Anda menentukan pengidentifikasi layanan yang berbeda.