Aracılığıyla paylaş


Hizmet Eşleme Makroları

Uyarı

Etkin Şablon Kitaplığı (ATL) desteklenmeye devam eder. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.

Bu makrolar hizmet eşlemelerini ve girdilerini tanımlar.

Veri Akışı Adı Açıklama
BEGIN_SERVICE_MAP ATL hizmet eşlemesinin başlangıcını işaretler.
END_SERVICE_MAP ATL hizmet eşlemesinin sonunu işaretler.
SERVICE_ENTRY Nesnenin belirli bir hizmet kimliğini desteklediğini gösterir.
SERVICE_ENTRY_CHAIN IServiceProviderImpl::QueryService'e belirtilen nesneye zincir oluşturmasını sağlar.

Gereksinimler

Üst bilgi: atlcom.h

BEGIN_SERVICE_MAP

Hizmet eşlemesinin başlangıcını işaretler.

BEGIN_SERVICE_MAP(theClass)

Parametreler

theClass
[in] Hizmet eşlemesini içeren sınıfı belirtir.

Açıklamalar

COM nesnenizde hizmet sağlayıcısı işlevselliğini uygulamak için hizmet eşlemesini kullanın. İlk olarak, sınıfınızı IServiceProviderImpl'den türetmelisiniz. İki tür giriş vardır:

Örnek

BEGIN_SERVICE_MAP(CMyService)
   SERVICE_ENTRY(SID_SBindHost)  // This object supports the SBindHost service
   SERVICE_ENTRY_CHAIN(m_spClientSite) // Everything else, just ask the container
END_SERVICE_MAP()

END_SERVICE_MAP

Hizmet eşlemesinin sonunu işaretler.

END_SERVICE_MAP()

Örnek

BEGIN_SERVICE_MAP örneğine bakın.

SERVICE_ENTRY

Nesnenin SID tarafından belirtilen hizmet kimliğini desteklediğini gösterir.

SERVICE_ENTRY( SID )

Parametreler

SID
Hizmet kimliği.

Örnek

BEGIN_SERVICE_MAP örneğine bakın.

SERVICE_ENTRY_CHAIN

IServiceProviderImpl::QueryService'e punk tarafından belirtilen nesneye zincir oluşturmasını sağlar.

SERVICE_ENTRY_CHAIN( punk )

Parametreler

Punk
Zincirlemenin uygulandığı IUnknown arabiriminin işaretçisi.

Örnek

BEGIN_SERVICE_MAP örneğine bakın.

IServiceProviderImpl::QueryService

Belirtilen hizmeti oluşturur veya bu hizmete erişir ve hizmet için belirtilen arabirime bir arabirim işaretçisi döndürür.

STDMETHOD(QueryService)(
    REFGUID guidService,
    REFIID riid,
    void** ppvObject);

Parametreler

guidService
[in] Hizmet tanımlayıcısı (SID) işaretçisi.

riid
[in] Çağıranın erişim kazanmak için olduğu arabirimin tanımlayıcısı.

ppvObj
[out] İstenen arabirime dolaylı işaretçi.

Dönüş Değeri

Döndürülen HRESULT aşağıdaki değerlerden biridir:

Dönüş değeri Anlamı
S_OK Hizmet başarıyla oluşturuldu veya alındı.
E_INVALIDARG Bir veya daha fazla bağımsız değişken geçersiz.
E_OUTOFMEMORY Bellek, hizmeti oluşturmak için yetersiz.
E_UNEXPECTED Bilinmeyen bir hata oluştu.
E_NOINTERFACE İstenen arabirim bu hizmetin parçası değil veya hizmet bilinmiyor.

Açıklamalar

QueryService belirtilen hizmette istenen arabirime yönelik dolaylı bir işaretçi döndürür. Çağıran, artık gerekli olmadığında bu işaretçiyi serbest bırakmakla sorumludur.

çağırdığınızda QueryService, hem bir hizmet tanımlayıcısı (guidService) hem de arabirim tanımlayıcısı (riid) geçirirsiniz. guidService, erişim istediğiniz hizmeti belirtir ve riid hizmetin parçası olan bir arabirimi tanımlar. Buna karşılık, arabirimine yönelik dolaylı bir işaretçi alırsınız.

Arabirimi uygulayan nesne, diğer hizmetlerin parçası olan arabirimleri de uygulayabilir. Aşağıdaki olasılıkları göz önünde bulundurun:

  • Bu arabirimlerden bazıları isteğe bağlı olabilir. Hizmet açıklamasında tanımlanan tüm arabirimler, hizmetin her uygulamasında veya döndürülen her nesnede mutlaka mevcut değildir.

  • çağrısının QueryInterfaceaksine, farklı bir hizmet tanımlayıcısı geçirmek, farklı bir Bileşen Nesne Modeli (COM) nesnesinin döndürülmesi anlamına gelmez.

  • Döndürülen nesne, hizmet tanımının parçası olmayan başka arabirimlere sahip olabilir.

SID_SMyService ve SID_SYourService gibi iki farklı hizmet, arabirimin uygulanması iki hizmet arasında ortak bir şey olmasa bile aynı arabirimin kullanımını belirtebilir. Çağrısı (SID_SMyService, IID_IDispatch) farklı bir nesne QueryService döndürebileceğinden (SID_SYourService, IID_IDispatch) bu yaklaşım çalışır QueryService . Farklı bir hizmet tanımlayıcısı belirttiğinizde nesne kimliği varsayılır.

Ayrıca bkz.

Makrolar