Aracılığıyla paylaş


Bağlantı Noktaları

Bu makalede, ve MFC sınıflarını CCmdTargetCConnectionPointkullanarak bağlantı noktalarının (eski adı OLE bağlantı noktaları) nasıl uygulanacakları açıklanmaktadır.

Geçmişte Bileşen Nesne Modeli (COM), nesnelerin arabirimlerde işlevsellik uygulamasına ve kullanıma sunmasına izin veren genel bir mekanizma (IUnknown::QueryInterface*) tanımlamıştı. Ancak, nesnelerin belirli arabirimleri çağırma yeteneklerini kullanıma sunmalarına izin veren ilgili bir mekanizma tanımlanmadı. Diğer bir deyişle, COM nesnelere gelen işaretçilerin (bu nesnenin arabirimlerine yönelik işaretçiler) nasıl işlendiğini tanımladı, ancak giden arabirimler için açık bir modele sahip değildi (nesnenin diğer nesnelerin arabirimlerine tutan işaretçiler). COM artık bu işlevselliği destekleyen bağlantı noktaları olarak adlandırılan bir modele sahiptir.

Bir bağlantının iki bölümü vardır: kaynak olarak adlandırılan arabirimi çağıran nesne ve havuzu olarak adlandırılan arabirimi uygulayan nesne. Bağlantı noktası, kaynak tarafından kullanıma sunulan arabirimdir. Kaynak, bir bağlantı noktasını ortaya çıkartarak havuzların kendisine (kaynak) bağlantı kurmasına olanak tanır. Bağlantı noktası mekanizması ( IConnectionPoint arabirim) aracılığıyla, havuz arabirimine bir işaretçi kaynak nesneye geçirilir. Bu işaretçi, kaynağa havuzun bir üye işlevleri kümesi uygulamasına erişim sağlar. Örneğin, havuz tarafından uygulanan bir olayı tetiklerken kaynak, havuz uygulamasının uygun yöntemini çağırabilir. Aşağıdaki şekilde, az önce açıklanan bağlantı noktası gösterilmektedir.

Diagram showing an implemented connection point.
Uygulanan Bağlan Noktası

MFC bu modeli C Bağlan ionPoint ve CCmdTarget sınıflarında uygular. arabiriminden CConnectionPointIConnectionPoint türetilen sınıflar, bağlantı noktalarını diğer nesnelere göstermek için kullanılır. 'den CCmdTarget türetilen sınıflar, bir nesnenin IConnectionPointContainer tüm kullanılabilir bağlantı noktalarını numaralandırabilen veya belirli bir bağlantı noktasını bulabilen arabirimini uygular.

Sınıfınızda uygulanan her bağlantı noktası için, bağlantı noktasını uygulayan bir bağlantı bölümü bildirmeniz gerekir. Bir veya daha fazla bağlantı noktası uygularsanız, sınıfınızda tek bir bağlantı eşlemesi de bildirmeniz gerekir. Bağlantı eşlemesi, ActiveX denetimi tarafından desteklenen bağlantı noktaları tablosudur.

Aşağıdaki örneklerde basit bir bağlantı eşlemesi ve bir bağlantı noktası gösterilmektedir. İlk örnek bağlantı eşlemesini ve noktasını bildirir; İkinci örnek haritayı ve noktayı uygular. CMyClass Türetilmiş bir CCmdTargetsınıf olması gerektiğini unutmayın. İlk örnekte kod, sınıf bildirimine şu bölümün protected altına eklenir:

class CMyClass : public CCmdTarget
{
protected:
   // Connection point for ISample interface
   BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
      CONNECTION_IID(IID_ISampleSink)
   END_CONNECTION_PART(SampleConnPt)

   DECLARE_CONNECTION_MAP()

BEGIN_CONNECTION_PART ve END_CONNECTION_PART makroları, XSampleConnPt bu belirli bağlantı noktasını uygulayan bir katıştırılmış sınıf ('dan CConnectionPointtüretilir) bildirir. Herhangi bir CConnectionPoint üye işlevini geçersiz kılmak veya kendi üye işlevlerinizi eklemek istiyorsanız, bunları bu iki makro arasında bildirin. Örneğin, makro bu CONNECTION_IID iki makro arasına CConnectionPoint::GetIID yerleştirildiğinde üye işlevini geçersiz kılar.

İkinci örnekte, denetimin uygulama dosyasına (.cpp dosyası) kod eklenir. Bu kod, bağlantı noktasını SampleConnPtiçeren bağlantı eşlemesini uygular:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

Sınıfınızda birden fazla bağlantı noktası varsa, BEGIN_CONNECTION_MAP ve END_CONNECTION_MAP makroları arasına ek CONNECTION_PART makrolar ekleyin.

Son olarak, sınıfın oluşturucusunda öğesine EnableConnections bir çağrı ekleyin. Örnek:

CMyClass::CMyClass()
{
   EnableConnections();
}

Bu kod eklendikten sonra türetilmiş sınıfınız CCmdTargetarabirim için ISampleSink bir bağlantı noktası gösterir. Aşağıdaki şekilde bu örnek gösterilmiştir.

Diagram showing a Connection point implemented by using MFC.
MFC ile Uygulanan bir Bağlan Noktası

Bağlantı noktaları genellikle "çok noktaya yayın" özelliğini destekler; aynı arabirime bağlı birden çok havuza yayın yapabilme özelliği. Aşağıdaki örnek parça, bir bağlantı noktasındaki her havuz arasında yineleme yaparak çok noktaya yayının nasıl yapılacağını gösterir:

void CMyClass::CallSinkFunc()
{
   POSITION pos = m_xSampleConnPt.GetStartPosition();
   ISampleSink* pSampleSink;
   while (pos != NULL)
   {
      pSampleSink = (ISampleSink*)(m_xSampleConnPt.GetNextConnection(pos));
      if (pSampleSink != NULL)
         pSampleSink->SinkFunc();
   }
}

Bu örnek, bağlantı CConnectionPoint::GetConnectionsnoktasında çağrısıyla SampleConnPt geçerli bağlantı kümesini alır. Ardından bağlantılar üzerinden yinelenir ve her etkin bağlantıda çağrılar ISampleSink::SinkFunc olur.

Ayrıca bkz.

MFC COM