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 COleControl
sı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 COleControl
sı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 theClass
adı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 pUnkSrc
pUnkSink
belirtilen 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 TRUE
ve 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 TRUE
olarak 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 pUnkSrc
pUnkSink
belirtilen 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 TRUE
ve 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 TRUE
olarak ayarlanması önerilir.
dwCookie
tarafından AfxConnectionAdvise
dö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