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.
Bu makrolar, tarafından erişilebilmeleri QueryInterfaceiçin bir nesnenin arabirimlerini COM haritasına girer. COM haritasındaki girdilerin sırası, sırasında eşleşen bir IID QueryInterfaceiçin sipariş arabirimlerinin denetlenmesidir.
| Makro | Açıklama |
|---|---|
| COM_INTERFACE_ENTRY | COM arabirim haritasına arabirimler girer. |
| COM_INTERFACE_ENTRY2 | İki devralma dalını kesinleştirmek için bu makroyı kullanın. |
| COM_INTERFACE_ENTRY_IID | Arabirimi COM eşlemesine girmek ve IID'sini belirtmek için bu makroyu kullanın. |
| COM_INTERFACE_ENTRY2_IID | farklı bir IID belirtebilmeniz dışında, COM_INTERFACE_ENTRY2 ile aynıdır. |
| COM_INTERFACE_ENTRY_AGGREGATE | iid tarafından tanımlanan arabirim için sorgulandığında, COM_INTERFACE_ENTRY_AGGREGATE öğesine punkiletir. |
| COM_INTERFACE_ENTRY_AGGREGATE_BLIND | COM_INTERFACE_ENTRY_AGGREGATE ile aynıdır, ancak herhangi bir IID sorgusunun sorgunun punk'a iletilmesiyle sonuçlanması gerekir. |
| COM_INTERFACE_ENTRY_AUTOAGGREGATE | COM_INTERFACE_ENTRY_AGGREGATE ile aynıdır, ancak punk NULL ise clsid tarafından açıklanan toplamayı otomatik olarak oluşturur. |
| COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND | COM_INTERFACE_ENTRY_AUTOAGGREGATE ile aynıdır, ancak herhangi bir IID sorgulaması sorgunun punk'a iletilmesiyle sonuçlanır ve punk NULL ise clsid tarafından açıklanan toplamayı otomatik olarak oluşturur. |
| COM_INTERFACE_ENTRY_BREAK | Belirtilen arabirim sorgulandığında programınızın DebugBreak'i çağırmasına neden olur. |
| COM_INTERFACE_ENTRY_CACHED_TEAR_OFF | Her örnek için arabirime özgü verileri kaydeder. |
| COM_INTERFACE_ENTRY_TEAR_OFF | Yırtılmış arabirimlerinizi kullanıma sunar. |
| COM_INTERFACE_ENTRY_CHAIN | İşlem COM eşlemesinde bu girişe ulaştığında temel sınıfın COM eşlemesini işler. |
| COM_INTERFACE_ENTRY_FUNC | ATL'nin mantığına bağlanmaya yönelik genel bir QueryInterface mekanizma. |
| COM_INTERFACE_ENTRY_FUNC_BLIND | COM_INTERFACE_ENTRY_FUNC ile aynıdır, ancak herhangi bir IID sorgulanması, func çağrısına neden olur. |
| COM_INTERFACE_ENTRY_NOINTERFACE | E_NOINTERFACE döndürür ve belirtilen arabirim sorgulandığında COM eşlemesi işlemini sonlandırır. |
Gereksinimler
Üst bilgi: atlcom.h
COM_INTERFACE_ENTRY
COM arabirim haritasına arabirimler girer.
Sözdizimi
COM_INTERFACE_ENTRY( x )
Parametreler
x
[in] Sınıf nesnenizin doğrudan türetilen arabiriminin adı.
Açıklamalar
Genellikle bu, en sık kullandığınız giriş türüdür.
Örnek
BEGIN_COM_MAP(CThisExample)
COM_INTERFACE_ENTRY(IThisExample)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
Gereksinimler
Üst bilgi: atlcom.h
COM_INTERFACE_ENTRY2
İki devralma dalını kesinleştirmek için bu makroyı kullanın.
COM_INTERFACE_ENTRY2(x, x2)
Parametreler
x
[in] Nesnenizden kullanıma açmak istediğiniz arabirimin adı.
x2
[in] x öğesinin kullanıma sunulduğu devralma dalının adı.
Açıklamalar
Örneğin, sınıf nesnenizi iki çift arabirimden türetirseniz, arabirimlerden herhangi birinden elde edilebildiğinden COM_INTERFACE_ENTRY2 IDispatch kullanarak kullanıma sunarsınızIDispatch.
Örnek
class ATL_NO_VTABLE CEntry2Example :
public CEntry2ExampleBase, // CEntry2ExampleBase derives from IDispatch
public IDispatchImpl<IEntry2Example, &IID_IEntry2Example, &LIBID_NVC_ATL_WindowingLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
public CComCoClass<CEntry2Example, &CLSID_Entry2Example>
{
public:
CEntry2Example()
{
}
BEGIN_COM_MAP(CEntry2Example)
COM_INTERFACE_ENTRY(IEntry2Example)
COM_INTERFACE_ENTRY2(IDispatch, IEntry2Example)
END_COM_MAP()
};
COM_INTERFACE_ENTRY_IID
Arabirimi COM eşlemesine girmek ve IID'sini belirtmek için bu makroyu kullanın.
COM_INTERFACE_ENTRY_IID(iid, x)
Parametreler
iid
[in] Kullanıma sunulan arabirimin GUID'i.
x
[in] vtable'ının iid tarafından tanımlanan arabirim olarak kullanıma sunulduğu sınıfın adı.
Örnek
BEGIN_COM_MAP(CExample)
COM_INTERFACE_ENTRY(IExample)
COM_INTERFACE_ENTRY_IID(IID_IDispatch, CExampleDispatch)
COM_INTERFACE_ENTRY(IExampleBase)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
COM_INTERFACE_ENTRY2_IID
farklı bir IID belirtebilmeniz dışında, COM_INTERFACE_ENTRY2 ile aynıdır.
COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Parametreler
iid
[in] Arabirim için belirttiğiniz GUID.
x
[in] Sınıf nesnenizin doğrudan türettiği bir arabirimin adı.
x2
[in] Sınıf nesnenizin doğrudan türettiği ikinci bir arabirimin adı.
COM_INTERFACE_ENTRY_AGGREGATE
iid tarafından tanımlanan arabirim için sorgulandığında, COM_INTERFACE_ENTRY_AGGREGATE punk'a iletir.
COM_INTERFACE_ENTRY_AGGREGATE(iid, punk)
Parametreler
iid
[in] Sorgulanan arabirimin GUID'i.
Punk
[in] İşaretçinin IUnknown adı.
Açıklamalar
Punk parametresinin bir toplamanın iç bilinmeyenine veya NULL'a işaret ettiği varsayılır ve bu durumda giriş yoksayılır. Normalde, toplama işlemini içinde FinalConstructyaparsınızCoCreate.
Örnek
BEGIN_COM_MAP(COuter1)
COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_punkAgg)
END_COM_MAP()
COM_INTERFACE_ENTRY_AGGREGATE_BLIND
COM_INTERFACE_ENTRY_AGGREGATE ile aynıdır, ancak herhangi bir IID sorgusunun sorgunun punk'a iletilmesiyle sonuçlanması gerekir.
COM_INTERFACE_ENTRY_AGGREGATE_BLIND(punk)
Parametreler
Punk
[in] İşaretçinin IUnknown adı.
Açıklamalar
Arabirim sorgusu başarısız olursa COM eşlemesinin işlenmesi devam eder.
Örnek
BEGIN_COM_MAP(COuter2)
COM_INTERFACE_ENTRY_AGGREGATE_BLIND(m_punkAggBlind)
END_COM_MAP()
COM_INTERFACE_ENTRY_AUTOAGGREGATE
COM_INTERFACE_ENTRY_AGGREGATE ile aynıdır, ancak punk NULL ise clsid tarafından açıklanan toplamayı otomatik olarak oluşturur.
COM_INTERFACE_ENTRY_AUTOAGGREGATE(iid, punk, clsid)
Parametreler
iid
[in] Sorgulanan arabirimin GUID'i.
Punk
[in] İşaretçinin IUnknown adı. COM eşlemesini içeren sınıfın bir üyesi olmalıdır.
clsid
[in] Punk NULL olduğunda oluşturulacak toplamanın tanımlayıcısı.
Açıklamalar
Örnek
BEGIN_COM_MAP(COuter3)
COM_INTERFACE_ENTRY_AUTOAGGREGATE(__uuidof(IAutoAgg), m_punkAutoAgg, CLSID_CAutoAgg)
END_COM_MAP()
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND
COM_INTERFACE_ENTRY_AUTOAGGREGATE ile aynıdır, ancak herhangi bir IID sorgulaması sorgunun punk'a iletilmesiyle sonuçlanır ve punk NULL ise clsid tarafından açıklanan toplamayı otomatik olarak oluşturur.
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(punk, clsid)
Parametreler
Punk
[in] İşaretçinin IUnknown adı. COM eşlemesini içeren sınıfın bir üyesi olmalıdır.
clsid
[in] Punk NULL olduğunda oluşturulacak toplamanın tanımlayıcısı.
Açıklamalar
Arabirim sorgusu başarısız olursa COM eşlemesinin işlenmesi devam eder.
Örnek
BEGIN_COM_MAP(COuter4)
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(m_punkAutoAggB, CLSID_CAutoAggB)
END_COM_MAP()
COM_INTERFACE_ENTRY_BREAK
Belirtilen arabirim sorgulandığında programınızın DebugBreak'i çağırmasına neden olur.
COM_INTERFACE_ENTRY_BREAK(x)
Parametreler
x
[in] Arabirim tanımlayıcısını oluşturmak için kullanılan metin.
Açıklamalar
Arabirim IID'si, sonuna IID_x eklenerek oluşturulur. Örneğin, x ise IPersistStorageIID olurIID_IPersistStorage.
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF
Her örnek için arabirime özgü verileri kaydeder.
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(iid, x, punk)
Parametreler
iid
[in] Koparma arabiriminin GUID'i.
x
[in] Arabirimini uygulayan sınıfın adı.
Punk
[in] İşaretçinin IUnknown adı. COM eşlemesini içeren sınıfın bir üyesi olmalıdır. Sınıf nesnesinin oluşturucusunda NULL olarak başlatılmalıdır.
Açıklamalar
Arabirim kullanılmazsa, bu nesnenizin genel örnek boyutunu düşürür.
Örnek
BEGIN_COM_MAP(COuter)
COM_INTERFACE_ENTRY(IOuter)
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(IID_ITearOff, CTearOff, punkTearOff)
END_COM_MAP()
COM_INTERFACE_ENTRY_TEAR_OFF
Yırtılmış arabirimlerinizi kullanıma sunar.
COM_INTERFACE_ENTRY_TEAR_OFF(iid, x)
Parametreler
iid
[in] Koparma arabiriminin GUID'i.
x
[in] Arabirimini uygulayan sınıfın adı.
Açıklamalar
Ayrı bir nesne temsil ettiği arabirim için sorgulandığında örneklenen ayrı bir nesne olarak bir ayrı arabirim uygulanır. Genellikle, arabirim nadiren kullanıldığında arabiriminizi bir kopma olarak oluşturursunuz, çünkü bu işlem ana nesnenizin her örneğine bir vtable işaretçisi kaydeder. Başvuru sayısı sıfır olduğunda, yırtılma silinir. Koparma uygulayan sınıfın kendi COM eşlemesinden CComTearOffObjectBase türetilmesi ve bu eşlemeye sahip olması gerekir.
Örnek
BEGIN_COM_MAP(CBeeper)
COM_INTERFACE_ENTRY(IBeeper)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY_TEAR_OFF(IID_ISupportErrorInfo, CBeeper2)
END_COM_MAP()
COM_INTERFACE_ENTRY_CHAIN
İşlem COM eşlemesinde bu girişe ulaştığında temel sınıfın COM eşlemesini işler.
COM_INTERFACE_ENTRY_CHAIN(classname)
Parametreler
classname
[in] Geçerli nesnenin temel sınıfı.
Açıklamalar
Örneğin, aşağıdaki kodda:
BEGIN_COM_MAP(COuterObject)
COM_INTERFACE_ENTRY2(IDispatch, IOuterObject)
COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()
COM eşlemesindeki ilk girişin, COM eşlemesini içeren nesne üzerinde bir arabirim olması gerektiğini unutmayın. Bu nedenle, COM eşleme girdilerinizi COM_INTERFACE_ENTRY_CHAIN ile başlatamazsınız; bu da nesnenizin COM eşlemesinde COM_INTERFACE_ENTRY_CHAIN(COtherObject) göründüğü noktada farklı bir nesnenin COM eşlemesinin aranmalarına neden olur. Önce başka bir nesnenin COM eşlemesinde arama yapmak istiyorsanız, COM haritanıza için IUnknown bir arabirim girdisi ekleyin ve ardından diğer nesnenin COM eşlemesini zincirleyin. Örneğin:
BEGIN_COM_MAP(CThisObject)
COM_INTERFACE_ENTRY(IUnknown)
COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()
COM_INTERFACE_ENTRY_FUNC
ATL'nin mantığına bağlanmaya yönelik genel bir QueryInterface mekanizma.
COM_INTERFACE_ENTRY_FUNC(iid, dw, func)
Parametreler
iid
[in] Kullanıma sunulan arabirimin GUID'i.
Dw
[in] Func'e geçirilen bir parametre.
func
[in] iid döndürecek işlev işaretçisi.
Açıklamalar
iid sorgulanan arabirimin IID değeriyle eşleşiyorsa, func tarafından belirtilen işlev çağrılır. İşlevin bildirimi şu şekilde olmalıdır:
HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);
İşleviniz çağrıldığında sınıf pv nesnenizi gösterir. Riid parametresi sorgulanan arabirimi ifade eder, ppv işlevin arabirim işaretçisini depolaması gereken konuma yönelik işaretçidir ve dw girişte belirttiğiniz parametredir. İşlev * ppv değerini NULL olarak ayarlamalı ve arabirim döndürmemeyi seçerse E_NOINTERFACE veya S_FALSE döndürmelidir. E_NOINTERFACE ile COM eşlemesi işleme sonlandırıldı. S_FALSE ile, arabirim işaretçisi döndürülmese bile COM eşlemesi işleme devam eder. İşlev bir arabirim işaretçisi döndürürse S_OK döndürmelidir.
COM_INTERFACE_ENTRY_FUNC_BLIND
COM_INTERFACE_ENTRY_FUNC ile aynıdır, ancak herhangi bir IID sorgulanması, func çağrısına neden olur.
COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)
Parametreler
Dw
[in] Func'e geçirilen bir parametre.
func
[in] COM eşlemesindeki bu girdi işlendiğinde çağrılan işlev.
Açıklamalar
Herhangi bir hata, işlemin COM haritasında devam etmesine neden olur. İşlev bir arabirim işaretçisi döndürürse S_OK döndürmelidir.
COM_INTERFACE_ENTRY_NOINTERFACE
E_NOINTERFACE döndürür ve belirtilen arabirim sorgulandığında COM eşlemesi işlemini sonlandırır.
COM_INTERFACE_ENTRY_NOINTERFACE(x)
Parametreler
x
[in] Arabirim tanımlayıcısını oluşturmak için kullanılan metin.
Açıklamalar
Belirli bir durumda arabirimin kullanılmasını önlemek için bu makro kullanabilirsiniz. Örneğin, arabirim sorgusunun toplamanın iç bilinmeyenine iletilmesini önlemek için bu makroyu COM_INTERFACE_ENTRY_AGGREGATE_BLIND önce COM haritanıza ekleyebilirsiniz.
Arabirim IID'si, sonuna IID_x eklenerek oluşturulur. Örneğin, x ise IPersistStorageIID olurIID_IPersistStorage.