Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.