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


A COM és a .NET C++ attribútumai

A Microsoft olyan C++ attribútumokat határoz meg, amelyek leegyszerűsítik a COM-programozást és a .NET-keretrendszer közös nyelvi futtatókörnyezetének fejlesztését. Ha attribútumokat helyez el a forrásfájlokban, a fordító a szolgáltató DLL-ekkel együttműködve kódot szúr be vagy módosít a létrehozott objektumfájlokban. Ezek az attribútumok segítik az .idl fájlok, felületek, típuskódtárak és egyéb COM-elemek létrehozását. Az integrált fejlesztési környezetben (IDE) az attribútumokat a varázslók és a Tulajdonságok ablak támogatja.

Bár az attribútumok kiküszöbölik a COM-objektumok írásához szükséges részletes kódolást, a com-objektumok használatához háttérre van szüksége a COM alapjaiban .

Megjegyzés:

Ha C++ standard attribútumokat keres, tekintse meg az Attribútumok című témakört.

Az attribútumok célja

Az attribútumok a C++-t olyan irányokban terjesztik ki, amelyek jelenleg nem lehetségesek a nyelv klasszikus szerkezetének feltörése nélkül. Az attribútumok lehetővé teszik, hogy a szolgáltatók (külön DLL-ek) dinamikusan bővítik a nyelvi funkciókat. Az attribútumok elsődleges célja a COM-összetevők készítésének egyszerűsítése amellett, hogy növeli az összetevő fejlesztőjének termelékenységi szintjét. Az attribútumok szinte bármilyen C++ szerkezetre alkalmazhatók, például osztályokra, adattagokra vagy tagfüggvényekre. Az alábbiakban az új technológia által nyújtott előnyöket emeli ki:

  • Ismert és egyszerű hívási konvenciót tesz elérhetővé.

  • Beszúrt kódot használ, amelyet a hibakereső a makrókkal ellentétben felismer.

  • Egyszerű származtatást tesz lehetővé az alaposztályokból anélkül, hogy nehézkes megvalósítási részletekkel jár.

  • A COM-összetevők által igényelt nagy mennyiségű IDL-kód lecserélése néhány tömör attribútumra.

Ha például egy egyszerű eseményelvezetőt szeretne implementálni egy általános ATL-osztályhoz, alkalmazhatja a event_receiver attribútumot egy adott osztályra, például CMyReceiver. Az event_receiver attribútumot ezután a Microsoft C++ fordítója fordítja le, amely beszúrja a megfelelő kódot az objektumfájlba.

[event_receiver(com)]
class CMyReceiver
{
   void handler1(int i) { ... }
   void handler2(int i, float j) { ... }
}

Ezután beállíthatja a CMyReceiver metódusokat handler1 , és handler2 kezelheti az eseményeket (a belső függvény __hook használatával) egy eseményforrásból, amelyet event_source használatával hozhat létre.

Az attribútumok alapvető mechanikája

Háromféleképpen szúrhat be attribútumokat a projektbe. Először manuálisan szúrhatja be őket a forráskódba. Másodszor, a projektben szereplő objektum tulajdonságrácsának használatával is beillesztheti őket. Végül beszúrhatja őket a különböző varázslókkal. A Tulajdonságok ablak és a különböző varázslók használatáról további információt a Visual Studio Projects – C++ című témakörben talál.

Mint korábban, a projekt létrehozásakor a fordító elemzi az egyes C++ forrásfájlokat, és létrehoz egy objektumfájlt. Ha azonban a fordító egy attribútummal találkozik, a rendszer elemzi és szintaktikailag ellenőrzi. A fordító ezután dinamikusan meghív egy attribútumszolgáltatót, hogy szúrjon be kódot, vagy végezze el az egyéb módosításokat a fordításkor. A szolgáltató megvalósítása az attribútum típusától függően eltérő. Az ATL-hez kapcsolódó attribútumokat például a Atlprov.dllvalósítja meg.

Az alábbi ábra a fordító és az attribútumszolgáltató közötti kapcsolatot mutatja be.

Az összetevőattribútumok közötti kommunikációt bemutató ábra.

Megjegyzés:

Az attribútumhasználat nem módosítja a forrásfájl tartalmát. A létrehozott attribútumkód csak a hibakeresési munkamenetek során látható. Emellett a projekt minden forrásfájlja esetében létrehozhat egy szövegfájlt, amely megjeleníti az attribútum-helyettesítés eredményeit. Erről az eljárásról további információt a (Injektált kód egyesítése) és az injektált kód hibakeresése című témakörben talál/Fx.

A legtöbb C++ szerkezethez hasonlóan az attribútumok is olyan jellemzőkkel rendelkeznek, amelyek meghatározzák a megfelelő használatukat. Ezt az attribútum környezetének nevezik, és az attribútumkörnyezet táblája foglalkozik az egyes attribútum-referenciatémakörekkel. A coclass attribútum például csak egy meglévő osztályra vagy struktúrára alkalmazható, szemben a cpp_quote attribútummal, amely egy C++ forrásfájlon belül bárhová beszúrható.

Attribútumokra épülő program készítése

Miután Visual C++ attribútumokat helyezett a forráskódba, érdemes lehet, hogy a Microsoft C++ fordítója létrehozzon egy típustárat és egy .idl fájlt az ön számára. Az alábbi linkerbeállítások segítségével .tlb- és .idl-fájlokat hozhat létre:

Egyes projektek több független .idl fájlt tartalmaznak. Ezek két vagy több .tlb-fájl előállítására szolgálnak, és opcionálisan az erőforrásblokkhoz kötik őket. Ez a forgatókönyv jelenleg nem támogatott a Visual C++-ban.

Emellett a Visual C++ csatoló egyetlen MIDL-fájlba fogja kiadni az IDL-hez kapcsolódó attribútumadatokat. Egyetlen projektből nem lehet két típuskódtárat létrehozni.

Attribútumkörnyezetek

A C++ attribútumok négy alapmezővel írhatók le: a cél, amelyre alkalmazhatók (alkalmazhatók), ha ismételhetők vagy nem (Megismételhetőek), az egyéb attribútumok szükséges jelenléte (Kötelező attribútumok) és más attribútumokkal való inkompatibilitás (érvénytelen attribútumok). Ezek a mezők az attribútumok referenciatémakörében található kísérőtáblában jelennek meg. Ezeket a mezőket az alábbiakban ismertetjük.

A következőkre vonatkozik:

Ez a mező azokat a C++ nyelvi elemeket ismerteti, amelyek a megadott attribútum jogi céljai. Ha például egy attribútum az "osztály" kifejezést adja meg az Alkalmazva mezőben, az azt jelenti, hogy az attribútum csak egy érvényes C++ osztályra alkalmazható. Ha az attribútum egy osztály tagfüggvényére van alkalmazva, szintaxishiba következne be.

További információ: Attribútumok használat szerint.

Ismételhető

Ez a mező azt határozza meg, hogy az attribútum ismételten alkalmazható-e ugyanarra a célra. Az attribútumok többsége nem megismételhető.

Kötelező attribútumok

Ez a mező felsorolja azokat az attribútumokat, amelyeknek jelen kell lenniük (vagyis ugyanarra a célra kell alkalmazni) a megadott attribútum megfelelő működéséhez. Nem gyakori, hogy egy attribútumnak bármilyen bejegyzése van ehhez a mezőhöz.

Érvénytelen attribútumok

Ez a mező felsorolja azokat az attribútumokat, amelyek nem kompatibilisek a megadott attribútummal. Nem gyakori, hogy egy attribútumnak bármilyen bejegyzése van ehhez a mezőhöz.

Injektált kód hibakeresése

Az attribútumok használata jelentősen leegyszerűsítheti a C++ programozást. További információ: Fogalmak. Egyes attribútumokat a fordító közvetlenül értelmez. Más attribútumok kódot injektálnak a program forrásába, amelyet a fordító ezután lefordít. Ez az injektált kód megkönnyíti a programozást azáltal, hogy csökkenti az írandó kód mennyiségét. Előfordulhat azonban, hogy egy hiba miatt az alkalmazás sikertelen lesz az injektált kód végrehajtása közben. Ha ez történik, valószínűleg meg kell vizsgálnia az injektált kódot. A Visual Studio kétféleképpen jeleníti meg az injektált kódot:

  • Az injektált kódot a Szétszerelés ablakban tekintheti meg.

  • A /Fx használatával létrehozhat egy egyesített forrásfájlt, amely eredeti és beszúrt kódot tartalmaz.

A Szétszerelés ablak a forráskódnak és az attribútumok által beszúrt kódnak megfelelő szerelvénynyelvi utasításokat jeleníti meg. Emellett a Szétbontás ablak a forráskód széljegyzetét is megjelenítheti.

A forráskommentár bekapcsolása

  • Kattintson a jobb gombbal a Szétszerelés ablakra , és válassza a forráskód megjelenítése parancsot a helyi menüben.

    Ha ismeri egy attribútum helyét egy forrásablakban, a helyi menüvel megkeresheti az injektált kódot a Szétszerelés ablakban.

Injektált kód megtekintése

  1. A hibakeresőnek törés módban kell lennie.

  2. A forráskód ablakában helyezze a kurzort annak az attribútumnak az elé, amelynek az injektált kódját meg szeretné tekinteni.

  3. Kattintson a jobb gombbal, és válassza az Ugrás a szétszerelésre parancsot a helyi menüből.

    Ha az attribútum helye az aktuális végrehajtási pont közelében van, a Hibakeresés menüben kiválaszthatja a Szétbontás ablakot.

A szétszerelési kód megtekintése az aktuális végrehajtási ponton

  1. A hibakeresőnek törés módban kell lennie.

  2. A Hibakeresés menüben válassza a Windowst, és kattintson a Szétbontás gombra.

Ebben a részben

Attribútumprogramozási gyakori kérdések
Attribútumok csoport szerint
Attribútumok használat szerint
Attribútumok betűrendes hivatkozása