Aracılığıyla paylaş


makroları COM_INTERFACE_ENTRY

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.