Atributy C++ pro COM a .NET

Microsoft definuje sadu atributů jazyka C++, které zjednodušují programování modelu COM a vývoj modulu CLR .NET Framework. Když do zdrojových souborů zahrnete atributy, kompilátor pracuje s knihovnou DLL zprostředkovatele k vložení kódu nebo úpravě kódu do vygenerovaných souborů objektů. Tyto atributy pomáhají při vytváření souborů .idl, rozhraní, knihoven typů a dalších prvků modelu COM. V integrovaném vývojovém prostředí (IDE) jsou atributy podporovány průvodci a okno Vlastnosti.

I když atributy eliminují některé podrobné kódování potřebné k psaní objektů MODELU COM, potřebujete základní informace o modelu COM , abyste je mohli nejlépe použít.

Poznámka

Pokud hledáte standardní atributy jazyka C++, přečtěte si téma Atributy.

Účel atributů

Atributy rozšiřují jazyk C++ směrem, který momentálně není možný, aniž by došlo k narušení klasické struktury jazyka. Atributy umožňují poskytovatelům (samostatným knihovenm DLL) dynamicky rozšiřovat funkce jazyka. Hlavním cílem atributů je zjednodušit vytváření komponent modelu COM a zvýšit produktivitu vývojáře komponent. Atributy lze použít u téměř libovolného konstruktoru jazyka C++, jako jsou třídy, datové členy nebo členské funkce. Toto je zvýraznění výhod poskytovaných touto novou technologií:

  • Zpřístupňuje známou a jednoduchou konvenci volání.

  • Používá vložený kód, který ladicí program rozpozná na rozdíl od maker.

  • Umožňuje snadné odvození ze základních tříd bez zátěžových podrobností implementace.

  • Nahradí velké množství kódu IDL vyžadovaného komponentou COM několika stručnými atributy.

Pokud například chcete implementovat jednoduchou jímku událostí pro obecnou třídu ATL, můžete použít atribut event_receiver na konkrétní třídu, například CMyReceiver. Atribut event_receiver je pak zkompilován kompilátorem jazyka Microsoft C++, který vloží správný kód do souboru objektu.

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

Potom můžete nastavit metody a zpracovat události (pomocí vnitřní funkce __hook) ze zdroje událostí, který můžete vytvořit pomocí event_source.handler2handler1CMyReceiver

Základní mechanismy atributů

Do projektu můžete vložit atributy třemi způsoby. Nejdřív je můžete do zdrojového kódu vložit ručně. Za druhé je můžete vložit pomocí mřížky vlastností objektu v projektu. Nakonec je můžete vložit pomocí různých průvodců. Další informace o použití okna Vlastnosti a různých průvodců naleznete v tématu Projekty sady Visual Studio – C++.

Stejně jako předtím, když je projekt sestaven, kompilátor analyzuje každý zdrojový soubor C++ a vytvoří soubor objektu. Pokud však kompilátor narazí na atribut, je analyzován a syntakticky ověřen. Kompilátor pak dynamicky volá zprostředkovatele atributů, který vloží kód nebo provede jiné úpravy v době kompilace. Implementace poskytovatele se liší v závislosti na typu atributu. Například atributy související s ATL jsou implementovány atlprov.dll.

Následující obrázek znázorňuje vztah mezi kompilátorem a poskytovatelem atributů.

Diagram showing component attribute communication.

Poznámka

Použití atributu nemění obsah zdrojového souboru. Jediný čas, kdy je kód vygenerovaného atributu viditelný, je během ladicích relací. Kromě toho můžete pro každý zdrojový soubor v projektu vygenerovat textový soubor, který zobrazí výsledky nahrazení atributu. Další informace o tomto postupu naleznete v tématu /Fx (Sloučení vložený kód) a Ladění vložený kód.

Stejně jako většina konstruktorů jazyka C++ mají atributy sadu charakteristik, které definují jejich správné použití. Označuje se jako kontext atributu a řeší se v tabulce kontextu atributu pro každé referenční téma atributu. Například atribut coclass lze použít pouze u existující třídy nebo struktury, nikoli na atribut cpp_quote , který lze vložit kamkoli do zdrojového souboru jazyka C++.

Sestavení programu s atributy

Po vložení atributů Jazyka Visual C++ do zdrojového kódu můžete chtít, aby kompilátor Microsoft C++ vytvořil knihovnu typů a soubor .idl za vás. Následující možnosti linkeru vám pomůžou sestavovat soubory .tlb a .idl:

Některé projekty obsahují více nezávislých souborů .idl. Ty slouží k vytvoření dvou nebo více souborů .tlb a volitelně je svázat do bloku prostředků. Tento scénář není v současné době podporován v jazyce Visual C++.

Kromě toho linker Visual C++ vypíše všechny informace o atributech souvisejících s IDL do jednoho souboru MIDL. Z jednoho projektu nebude možné vygenerovat dvě knihovny typů.

Kontexty atributů

Atributy jazyka C++ je možné popsat pomocí čtyř základních polí: cíl, na který se dají použít (platí pro), pokud jsou opakovatelné nebo ne (opakovatelné), požadovaná přítomnost jiných atributů (povinné atributy) a nekompatibility s jinými atributy (neplatné atributy). Tato pole jsou uvedena v doprovodné tabulce v referenčním tématu každého atributu. Každé z těchto polí je popsáno níže.

Platí pro

Toto pole popisuje různé prvky jazyka C++, které jsou právními cíli pro zadaný atribut. Pokud například atribut v poli Platí pro určuje "class", znamená to, že atribut lze použít pouze pro právní třídu C++. Pokud se atribut použije na členovou funkci třídy, výsledkem by byla chyba syntaxe.

Další informace naleznete v tématu Atributy podle použití.

Opakovatelnou

Toto pole uvádí, zda lze atribut opakovaně použít na stejný cíl. Většina atributů není opakovatelná.

Požadované atributy

Toto pole obsahuje další atributy, které musí být přítomné (tj. použity na stejný cíl) pro správné fungování zadaného atributu. Atribut nemá žádné položky pro toto pole.

Neplatné atributy

Toto pole obsahuje seznam dalších atributů, které nejsou kompatibilní se zadaným atributem. Atribut nemá žádné položky pro toto pole.

Ladění vloženého kódu

Použití atributů může výrazně zjednodušit programování v jazyce C++. Další informace najdete v tématu Koncepty. Některé atributy jsou interpretovány přímo kompilátorem. Další atributy vloží kód do zdroje programu, který kompilátor pak zkompiluje. Tento vložený kód usnadňuje programování snížením množství kódu, který musíte napsat. Někdy ale může dojít k chybě, která může způsobit selhání aplikace, když spouští vložený kód. V takovém případě se pravděpodobně budete chtít podívat na vložený kód. Visual Studio nabízí dva způsoby, jak zobrazit vložený kód:

  • Vložený kód můžete zobrazit v okně Zpětné překladu .

  • Pomocí /Fx můžete vytvořit sloučený zdrojový soubor, který obsahuje původní a vložený kód.

V okně Zpětné překladu jsou uvedeny pokyny jazyka sestavení, které odpovídají zdrojovému kódu a kódu vloženého atributy. Kromě toho může okno Zpětné překladu zobrazit poznámku ke zdrojovému kódu.

Zapnutí zdrojové poznámky

  • Klikněte pravým tlačítkem myši na okno Zpětné překladu a v místní nabídce zvolte Zobrazit zdrojový kód .

    Pokud znáte umístění atributu ve zdrojovém okně, můžete pomocí místní nabídky najít vložený kód v okně Zpětné překladu .

Zobrazení vloženého kódu

  1. Ladicí program musí být v režimu přerušení.

  2. V okně zdrojového kódu umístěte kurzor před atribut, jehož vložený kód chcete zobrazit.

  3. Klikněte pravým tlačítkem myši a v místní nabídce vyberte Přejít na zpětný překlad .

    Pokud je umístění atributu blízko aktuálního bodu provádění, můžete v nabídce Ladění vybrat okno Zpětné překladu.

Zobrazení kódu zpětného překladu v aktuálním bodu provádění

  1. Ladicí program musí být v režimu přerušení.

  2. V nabídce Ladění zvolte Systém Windows a klepněte na tlačítko Zpětné překladu.

V tomto oddílu

Nejčastější dotazy k programování s atributy
Atributy podle skupin
Atributy podle použití
Abecedně řazená referenční dokumentace k atributům