Aracılığıyla paylaş


Bağlantı eşlemeleri

OLE denetimleri arabirimleri diğer uygulamaların kullanımına sunar. Bu arabirimler yalnızca kapsayıcıdan bu denetime erişime izin verir. Ole denetimi diğer OLE nesnelerinin dış arabirimlerine erişmek istiyorsa, bir bağlantı noktası oluşturulmalıdır. Bu bağlantı noktası, olay eşlemeleri veya bildirim işlevleri gibi dış dağıtım eşlemelerine giden erişimi denetlemeye olanak tanır.

Microsoft Foundation Sınıf Kitaplığı, bağlantı noktalarını destekleyen bir programlama modeli sunar. Bu modelde, OLE denetimi için arabirimleri veya bağlantı noktalarını belirtmek için "bağlantı eşlemeleri" kullanılır. Bağlantı eşlemeleri her bağlantı noktası için bir makro içerir. Bağlantı eşlemeleri hakkında daha fazla bilgi için sınıfına CConnectionPoint bakın.

Genellikle bir denetim yalnızca iki bağlantı noktası destekler: biri olaylar ve biri özellik bildirimleri için. Bunlar temel sınıf tarafından COleControl uygulanır ve denetim yazıcısı tarafından ek çalışma gerektirmez. Sınıfınızda uygulamak istediğiniz diğer tüm bağlantı noktaları el ile eklenmelidir. MFC, bağlantı eşlemelerini ve noktalarını desteklemek için aşağıdaki makroları sağlar:

Bağlantı Eşlemesi bildirimi ve ayırma

Veri Akışı Adı Açıklama
BEGIN_CONNECTION_PART Ek bir bağlantı noktası uygulayan katıştırılmış bir sınıf bildirir (sınıf bildiriminde kullanılmalıdır).
END_CONNECTION_PART Bir bağlantı noktasının bildirimini sonlandırır (sınıf bildiriminde kullanılmalıdır).
CONNECTION_IID Denetimin bağlantı noktasının arabirim kimliğini belirtir.
DECLARE_CONNECTION_MAP Bir bağlantı eşlemesinin bir sınıfta kullanılacağını bildirir (sınıf bildiriminde kullanılmalıdır).
BEGIN_CONNECTION_MAP Bağlantı eşlemesinin tanımını başlatır (sınıf uygulamasında kullanılmalıdır).
END_CONNECTION_MAP Bağlantı eşlemesinin tanımını sonlandırır (sınıf uygulamasında kullanılmalıdır).
CONNECTION_PART Denetimin bağlantı eşlemesinde bir bağlantı noktası belirtir.

Aşağıdaki işlevler, bağlantı noktalarını kullanarak bağlantı kurma ve bağlantısını kesme konusunda bir havuza yardımcı olabilir:

Bağlantı noktalarını başlatma/sonlandırma

Veri Akışı Adı Açıklama
AfxConnectionAdvise Kaynak ile havuz arasında bağlantı kurar.
AfxConnectionUnadvise Kaynak ile havuz arasındaki bağlantıyı keser.

BEGIN_CONNECTION_PART

BEGIN_CONNECTION_PART Olay ve özellik bildirim bağlantı noktalarının ötesinde ek bağlantı noktalarının tanımını başlatmak için makroyu kullanın.

BEGIN_CONNECTION_PART(theClass, localClass)

Parametreler

theClass Bağlantı noktası bu olan denetim sınıfının adını belirtir.

localClass Bağlantı noktasını uygulayan yerel sınıfın adını belirtir.

Açıklamalar

Sınıfınız için üye işlevlerini tanımlayan bildirim (.h) dosyasında, bağlantı noktasını makroyla BEGIN_CONNECTION_PART başlatın. Ardından makroyu CONNECTION_IID ve uygulamak istediğiniz diğer üye işlevlerini ekleyin. Son olarak, bağlantı noktası eşlemesini END_CONNECTION_PART makroyla tamamlayın.

Gereksinimler

Üstbilgi afxdisp.h

END_CONNECTION_PART

Bağlantı noktanızın bildirimini sonlandırır.

END_CONNECTION_PART(localClass)

Parametreler

localClass
Bağlantı noktasını uygulayan yerel sınıfın adını belirtir.

Gereksinimler

Üstbilgi afxdisp.h

CONNECTION_IID

OLE denetiminiz tarafından desteklenen bir bağlantı noktası için arabirim kimliği tanımlamak için ve END_CONNECTION_PART makroları arasında BEGIN_CONNECTION_PART kullanın.

CONNECTION_IID(iid)

Parametreler

iid
Bağlantı noktası tarafından çağrılan arabirimin arabirim kimliği.

Açıklamalar

iid bağımsız değişkeni, bağlantı noktasının bağlı havuzlarında çağıran arabirimi tanımlamak için kullanılan arabirim kimliğidir. Örneğin:

CONNECTION_IID(IID_ISampleSink)

Arabirimi çağıran ISinkInterface bir bağlantı noktası belirtir.

Gereksinimler

Üstbilgi afxdisp.h

DECLARE_CONNECTION_MAP

Programınızdaki türetilmiş her COleControlsınıf, denetiminizin desteklediği ek bağlantı noktalarını belirtmek için bir bağlantı eşlemesi sağlayabilir.

DECLARE_CONNECTION_MAP()

Açıklamalar

Denetiminiz ek noktaları destekliyorsa, sınıf bildiriminizin sonundaki makroyu kullanın DECLARE_CONNECTION_MAP . Ardından, sınıfın üye işlevlerini tanımlayan .cpp dosyasında makroyu BEGIN_CONNECTION_MAP , CONNECTION_PART denetimin bağlantı noktalarının her biri için makroları ve END_CONNECTION_MAP bağlantı eşlemesinin sonunu bildirmek için makroyu kullanın.

Gereksinimler

Üstbilgi afxdisp.h

BEGIN_CONNECTION_MAP

Programınızdaki türetilmiş her COleControlsınıf, denetiminizin destekleyecek bağlantı noktalarını belirtmek için bir bağlantı eşlemesi sağlayabilir.

BEGIN_CONNECTION_MAP(theClass, theBase)

Parametreler

theClass
Bağlantı eşlemesi bu olan denetim sınıfının adını belirtir.

theBase
temel sınıfının theClassadını belirtir.

Açıklamalar

Sınıfınız için üye işlevlerini tanımlayan uygulama (.CPP) dosyasında, makroyla bağlantı eşlemesini BEGIN_CONNECTION_MAP başlatın, ardından makroyu kullanarak CONNECTION_PART bağlantı noktalarınızın her biri için makro girdileri ekleyin. Son olarak, makroyla bağlantı eşlemesini END_CONNECTION_MAP tamamlayın.

Gereksinimler

Üstbilgi afxdisp.h

END_CONNECTION_MAP

Bağlantı haritanızın tanımını sonlandırır.

END_CONNECTION_MAP()

Gereksinimler

Üstbilgi afxdisp.h

CONNECTION_PART

OLE denetiminiz için bir bağlantı noktasını belirli bir arabirim kimliğiyle eşler.

CONNECTION_PART(theClass, iid, localClass)

Parametreler

theClass
Bağlantı noktası bu olan denetim sınıfının adını belirtir.

iid
Bağlantı noktası tarafından çağrılan arabirimin arabirim kimliği.

localClass
Bağlantı noktasını uygulayan yerel sınıfın adını belirtir.

Açıklamalar

Örneğin:

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

arabirimini çağıran IID_ISinkInterface bir bağlantı noktası ile bir bağlantı haritası uygular.

Gereksinimler

Üstbilgi afxdisp.h

AfxConnectionAdvise

tarafından belirtilen bir kaynak ile tarafından pUnkSrcpUnkSinkbelirtilen bir havuz arasında bağlantı kurmak için bu işlevi çağır.

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

Parametreler

pUnkSrc
Arabirimi çağıran nesne işaretçisi.

pUnkSink
Arabirimini uygulayan nesneye yönelik bir işaretçi.

iid
Bağlantının arabirim kimliği.

bRefCount
İşlem dışı bağlantılar için bu parametre olmalıdır TRUEve bağlantının oluşturulmasının başvuru sayısının pUnkSink artırılacağına neden olması gerektiğini gösterir.

İşlem içi bağlantılar için, TRUE bağlantı oluşturmanın başvuru sayısının pUnkSink artırılacağına neden olması gerektiğini gösterir. FALSE başvuru sayısının artırılmaması gerektiğini gösterir.

Uyarı: Genel olarak, hangi bağlantıların işlemde olduğu ve hangi bağlantıların işlem dışı olduğu tahmin edilebileceğinden, bu parametrenin her zaman olarak TRUEolarak ayarlanması önerilir.

pdwCookie
Bağlantı tanımlayıcının DWORD döndürüldüğü bir işaretçi. Bu değer, bağlantı kesilirken parametresi AfxConnectionUnadvise olarak dwCookie geçirilmelidir.

Dönüş Değeri

Bir bağlantı kurulduysa sıfır olmayan; aksi takdirde 0.

Örnek

//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;

//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);

Gereksinimler

Üstbilgi: afxctl.h

AfxConnectionUnadvise

tarafından belirtilen bir kaynak ile tarafından pUnkSrcpUnkSinkbelirtilen havuz arasındaki bağlantının bağlantısını kesmek için bu işlevi çağır.

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

Parametreler

pUnkSrc
Arabirimi çağıran nesne işaretçisi.

pUnkSink
Arabirimini uygulayan nesneye yönelik bir işaretçi.

iid
Bağlantı noktası arabiriminin arabirim kimliği.

bRefCount
İşlem dışı bağlantılar için bu parametre olmalıdır TRUEve bağlantının oluşturulmasının başvuru sayısının pUnkSink azalmasına neden olması gerektiğini gösterir.

İşlem içi bağlantılar için, TRUE bağlantının oluşturulmasının başvuru sayısının pUnkSink azalmasına neden olması gerektiğini gösterir. FALSE başvuru sayısının azalmaması gerektiğini gösterir.

Uyarı: Genel olarak, hangi bağlantıların işlemde olduğu ve hangi bağlantıların işlem dışı olduğu tahmin edilebileceğinden, bu parametrenin her zaman olarak TRUEolarak ayarlanması önerilir.

dwCookie
tarafından AfxConnectionAdvisedöndürülen bağlantı tanımlayıcısı.

Dönüş değeri

Bağlantı kesildiyse sıfır olmayan; aksi takdirde 0.

Örnek

//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);

Gereksinimler

Üstbilgi: afxctl.h

Ayrıca bkz.

Makrolar ve Genel Ayarlar