Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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:
SERVICE_ENTRY Belirtilen hizmet kimliği (SID) için desteği gösterir.
SERVICE_ENTRY_CHAIN IServiceProviderImpl::QueryService'e, belirtilen başka bir nesneye zincir oluşturmasını belirtir.
Ö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.