Bagikan melalui


Kelas IServiceProviderImpl

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.

Lihat juga

Gambaran Umum Kelas