Megosztás a következőn keresztül:


makrók COM_INTERFACE_ENTRY

Megjegyzés:

Az aktív sablontár (ATL) továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Ezek a makrók beírnak egy objektum felületét a COM-térképbe, hogy elérhessék QueryInterfaceőket. A COM-térkép bejegyzéseinek sorrendje az, hogy a rendelési felületeken a rendszer ellenőrzi a megfelelő IID-azonosítót a rendszer a rendszer során QueryInterface.

Macro Description
COM_INTERFACE_ENTRY Beírja az interfészeket a COM-felület térképébe.
COM_INTERFACE_ENTRY2 Ezzel a makróval egyértelműsíthet két öröklési ágat.
COM_INTERFACE_ENTRY_IID Ezzel a makróval írja be a felületet a COM-térképbe, és adja meg az IID azonosítóját.
COM_INTERFACE_ENTRY2_IID Ugyanaz, mint COM_INTERFACE_ENTRY2, kivéve, ha megadhat egy másik IID azonosítót.
COM_INTERFACE_ENTRY_AGGREGATE Ha az iid által azonosított felület lekérdezve van, COM_INTERFACE_ENTRY_AGGREGATE a következőre továbbítja a következőt punk: .
COM_INTERFACE_ENTRY_AGGREGATE_BLIND Ugyanaz, mint COM_INTERFACE_ENTRY_AGGREGATE, kivéve, hogy az IID lekérdezése a lekérdezést a punknak továbbítja.
COM_INTERFACE_ENTRY_AUTOAGGREGATE Ugyanaz, mint COM_INTERFACE_ENTRY_AGGREGATE, kivéve, ha a punk NULL, automatikusan létrehozza a clsid által leírt összesítést.
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND Ugyanaz, mint COM_INTERFACE_ENTRY_AUTOAGGREGATE, kivéve, hogy az IID lekérdezése a lekérdezést a punknak továbbítja, és ha a punk NULL, automatikusan létrehozza a clsid által leírt összesítést.
COM_INTERFACE_ENTRY_BREAK A program meghívja a DebugBreaket , ha a megadott felületet lekérdezi.
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF Minden példányhoz menti a felületspecifikus adatokat.
COM_INTERFACE_ENTRY_TEAR_OFF Elérhetővé teszi a szakadó felületeket.
COM_INTERFACE_ENTRY_CHAIN Feldolgozza az alaposztály COM-térképét, amikor a feldolgozás eléri ezt a bejegyzést a COM-térképen.
COM_INTERFACE_ENTRY_FUNC Az ATL logikájához való csatlakoztatás általános mechanizmusa QueryInterface .
COM_INTERFACE_ENTRY_FUNC_BLIND Ugyanaz, mint COM_INTERFACE_ENTRY_FUNC, kivéve, hogy az IID lekérdezése a func hívását eredményezi.
COM_INTERFACE_ENTRY_NOINTERFACE Visszaadja a E_NOINTERFACE, és leállítja a COM-leképezés feldolgozását a megadott felület lekérdezésekor.

Requirements

Fejléc: atlcom.h

COM_INTERFACE_ENTRY

Beírja az interfészeket a COM-felület térképébe.

Szemantika

COM_INTERFACE_ENTRY( x )

Paraméterek

x
[in] Annak a felületnek a neve, amelyből az osztályobjektum származik.

Megjegyzések

Általában ez a leggyakrabban használt bejegyzéstípus.

Example

BEGIN_COM_MAP(CThisExample)
   COM_INTERFACE_ENTRY(IThisExample)
   COM_INTERFACE_ENTRY(IDispatch)
   COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()

Requirements

Fejléc: atlcom.h

COM_INTERFACE_ENTRY2

Ezzel a makróval egyértelműsíthet két öröklési ágat.

COM_INTERFACE_ENTRY2(x, x2)

Paraméterek

x
[in] Az objektumból elérhetővé tenni kívánt felület neve.

x2
[in] Annak az öröklési ágnak a neve, amelyről az x látható.

Megjegyzések

Ha például az osztályobjektumot két kettős adapterből származtatja, akkor COM_INTERFACE_ENTRY2 használatával teheti közzé IDispatch , mivel IDispatch bármelyik interfészből beszerezhető.

Example

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

Ezzel a makróval írja be a felületet a COM-térképbe, és adja meg az IID azonosítóját.

COM_INTERFACE_ENTRY_IID(iid, x)

Paraméterek

iid
[in] A közzétett felület GUID azonosítója.

x
[in] Annak az osztálynak a neve, amelynek virtuális táblája az iid által azonosított felületként lesz közzétéve.

Example

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

Ugyanaz, mint COM_INTERFACE_ENTRY2, kivéve, ha megadhat egy másik IID azonosítót.

COM_INTERFACE_ENTRY2_IID(iid, x, x2)

Paraméterek

iid
[in] Az interfészhez megadott GUID.

x
[in] Annak a felületnek a neve, amelyből az osztályobjektum közvetlenül származik.

x2
[in] Egy második felület neve, amelyből az osztályobjektum közvetlenül származik.

COM_INTERFACE_ENTRY_AGGREGATE

Amikor az iid által azonosított felület lekérdezve van, COM_INTERFACE_ENTRY_AGGREGATE továbbít a punknak.

COM_INTERFACE_ENTRY_AGGREGATE(iid, punk)

Paraméterek

iid
[in] A lekérdezett felület GUID azonosítója.

Punk
[in] Egy mutató neve IUnknown .

Megjegyzések

A punk paraméter feltételezi, hogy az aggregátum belső ismeretlenjére vagy NULL értékre mutat, ebben az esetben a bejegyzés figyelmen kívül lesz hagyva. Az összesítés általában a következőben szerepel: CoCreate .FinalConstruct

Example

BEGIN_COM_MAP(COuter1)
   COM_INTERFACE_ENTRY_AGGREGATE(__uuidof(IAgg), m_punkAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AGGREGATE_BLIND

Ugyanaz, mint COM_INTERFACE_ENTRY_AGGREGATE, kivéve, hogy az IID lekérdezése a lekérdezést a punknak továbbítja.

COM_INTERFACE_ENTRY_AGGREGATE_BLIND(punk)

Paraméterek

Punk
[in] Egy mutató neve IUnknown .

Megjegyzések

Ha az interfész lekérdezése sikertelen, a COM-térkép feldolgozása folytatódik.

Example

BEGIN_COM_MAP(COuter2)
   COM_INTERFACE_ENTRY_AGGREGATE_BLIND(m_punkAggBlind)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE

Ugyanaz, mint COM_INTERFACE_ENTRY_AGGREGATE, kivéve, ha a punk NULL, automatikusan létrehozza a clsid által leírt összesítést.

COM_INTERFACE_ENTRY_AUTOAGGREGATE(iid, punk, clsid)

Paraméterek

iid
[in] A lekérdezett felület GUID azonosítója.

Punk
[in] Egy mutató neve IUnknown . A COM-térképet tartalmazó osztály tagjának kell lennie.

clsid
[in] Az aggregátum azonosítója, amely null érték esetén jön létre.

Megjegyzések

Example

BEGIN_COM_MAP(COuter3)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE(__uuidof(IAutoAgg), m_punkAutoAgg, CLSID_CAutoAgg)
END_COM_MAP()

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND

Ugyanaz, mint COM_INTERFACE_ENTRY_AUTOAGGREGATE, kivéve, hogy az IID lekérdezése a lekérdezést a punknak továbbítja, és ha a punk NULL, automatikusan létrehozza a clsid által leírt összesítést.

COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(punk, clsid)

Paraméterek

Punk
[in] Egy mutató neve IUnknown . A COM-térképet tartalmazó osztály tagjának kell lennie.

clsid
[in] Az aggregátum azonosítója, amely null érték esetén jön létre.

Megjegyzések

Ha az interfész lekérdezése sikertelen, a COM-térkép feldolgozása folytatódik.

Example

BEGIN_COM_MAP(COuter4)
   COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND(m_punkAutoAggB, CLSID_CAutoAggB)
END_COM_MAP()

COM_INTERFACE_ENTRY_BREAK

A program meghívja a DebugBreaket , ha a megadott felületet lekérdezi.

COM_INTERFACE_ENTRY_BREAK(x)

Paraméterek

x
[in] A felületazonosító létrehozásához használt szöveg.

Megjegyzések

A felület IID-azonosítója az x-hezIID_való hozzáfűzéssel jön létre. Ha például x , IPersistStorageakkor az IID lesz IID_IPersistStorage.

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF

Minden példányhoz menti a felületspecifikus adatokat.

COM_INTERFACE_ENTRY_CACHED_TEAR_OFF(iid, x, punk)

Paraméterek

iid
[in] A szakadási felület GUID azonosítója.

x
[in] Az interfészt megvalósító osztály neve.

Punk
[in] Egy mutató neve IUnknown . A COM-térképet tartalmazó osztály tagjának kell lennie. Null értékre kell inicializálni az osztályobjektum konstruktorában.

Megjegyzések

Ha nem használja a felületet, ez csökkenti az objektum teljes példányméretét.

Example

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

Elérhetővé teszi a szakadó felületeket.

COM_INTERFACE_ENTRY_TEAR_OFF(iid, x)

Paraméterek

iid
[in] A szakadási felület GUID azonosítója.

x
[in] Az interfészt megvalósító osztály neve.

Megjegyzések

A szakadó felület egy különálló objektumként van implementálva, amely minden alkalommal példányosítva lesz, amikor az általa képviselt felületet lekérdezik. Általában szakadásként hozza létre a felületet, ha ritkán használják a felületet, mivel ez a fő objektum minden példányában ment egy vtable mutatót. A szakadás akkor törlődik, ha a hivatkozási száma nullává válik. Az elszakítást végrehajtó osztálynak saját COM-térképpel CComTearOffObjectBase kell rendelkeznie.

Example

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

Feldolgozza az alaposztály COM-térképét, amikor a feldolgozás eléri ezt a bejegyzést a COM-térképen.

COM_INTERFACE_ENTRY_CHAIN(classname)

Paraméterek

Osztálynév
[in] Az aktuális objektum alaposztálya.

Megjegyzések

Például a következő kódban:

BEGIN_COM_MAP(COuterObject)
   COM_INTERFACE_ENTRY2(IDispatch, IOuterObject)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

Vegye figyelembe, hogy a COM-térkép első bejegyzésének a COM-térképet tartalmazó objektum felületének kell lennie. Így nem indíthatja el a COM-térkép bejegyzéseit COM_INTERFACE_ENTRY_CHAIN, ami miatt egy másik objektum COM-térképe azon a ponton kereshető, ahol COM_INTERFACE_ENTRY_CHAIN(COtherObject) megjelenik az objektum COM-térképén. Ha először egy másik objektum COM-térképén szeretne keresni, adjon hozzá egy felületi bejegyzést a COM-térképhez IUnknown , majd láncolnia kell a másik objektum COM-térképét. Például:

BEGIN_COM_MAP(CThisObject)
   COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN(CBase)
END_COM_MAP()

COM_INTERFACE_ENTRY_FUNC

Az ATL logikájához való csatlakoztatás általános mechanizmusa QueryInterface .

COM_INTERFACE_ENTRY_FUNC(iid, dw, func)

Paraméterek

iid
[in] A közzétett felület GUID azonosítója.

Dw
[in] A func-nak átadott paraméter.

func
[in] A függvénymutató, amely iid értéket ad vissza.

Megjegyzések

Ha az iid megfelel a lekérdezett felület IID azonosítójának, akkor a func által megadott függvény lesz meghívva. A függvény deklarációjának a következőnek kell lennie:

HRESULT WINAPI func(void* pv, REFIID riid, LPVOID* ppv, DWORD_PTR dw);

A függvény meghívásakor pv az osztályobjektumra mutat. A riid paraméter a lekérdezett felületre hivatkozik, a mutató arra a helyre mutat, ppv ahol a függvénynek a kurzort a felületre kell tárolnia, a dw pedig a bejegyzésben megadott paraméter. A függvénynek null ppv értékűre kell állítania, és vissza kell adnia E_NOINTERFACE vagy S_FALSE, ha úgy dönt, hogy nem ad vissza felületet. A E_NOINTERFACE a COM-térképfeldolgozás leáll. A S_FALSE a COM-térképfeldolgozás folytatódik, annak ellenére, hogy nem ad vissza illesztőmutatót. Ha a függvény egy illesztőmutatót ad vissza, akkor S_OK kell visszaadnia.

COM_INTERFACE_ENTRY_FUNC_BLIND

Ugyanaz, mint COM_INTERFACE_ENTRY_FUNC, kivéve, hogy az IID lekérdezése a func hívását eredményezi.

COM_INTERFACE_ENTRY_FUNC_BLIND(dw, func)

Paraméterek

Dw
[in] A func-nak átadott paraméter.

func
[in] A COM-térképen szereplő bejegyzés feldolgozásakor meghívt függvény.

Megjegyzések

A hibák miatt a feldolgozás folytatódik a COM-térképen. Ha a függvény egy illesztőmutatót ad vissza, akkor S_OK kell visszaadnia.

COM_INTERFACE_ENTRY_NOINTERFACE

Visszaadja a E_NOINTERFACE, és leállítja a COM-leképezés feldolgozását a megadott felület lekérdezésekor.

COM_INTERFACE_ENTRY_NOINTERFACE(x)

Paraméterek

x
[in] A felületazonosító létrehozásához használt szöveg.

Megjegyzések

Ezzel a makróval megakadályozhatja, hogy egy adott esetben használjon felületet. Ezt a makrót például közvetlenül a COM_INTERFACE_ENTRY_AGGREGATE_BLIND előtt beszúrhatja a COM-térképbe, hogy megakadályozza a felület lekérdezésének továbbítását az aggregátum belső ismeretlen részére.

A felület IID-azonosítója az x-hezIID_való hozzáfűzéssel jön létre. Ha például x , IPersistStorageakkor az IID lesz IID_IPersistStorage.