Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft definierar en uppsättning C++-attribut som förenklar COM-programmering och gemensam språkkörningsutveckling för .NET Framework. När du inkluderar attribut i källfilerna fungerar kompilatorn med provider-DLL:er för att infoga kod eller ändra koden i de genererade objektfilerna. Dessa attribut underlättar skapandet av .idl-filer, gränssnitt, typbibliotek och andra COM-element. I den integrerade utvecklingsmiljön (IDE) stöds attributen av guiderna och av fönstret Egenskaper.
Attribut eliminerar en del av den detaljerade kodning som krävs för att skriva COM-objekt, men du behöver en bakgrund i COM-grunderna för att kunna använda dem på bästa sätt.
Anmärkning
Om du letar efter C++-standardattribut kan du läsa Attribut.
Syftet med attribut
Attribut utökar C++ i riktningar som för närvarande inte är möjliga utan att bryta språkets klassiska struktur. Med attribut kan leverantörer (separata DLL:er) utöka språkfunktionerna dynamiskt. Det primära målet med attribut är att förenkla redigeringen av COM-komponenter, förutom att öka produktivitetsnivån för komponentutvecklaren. Attribut kan tillämpas på nästan alla C++-konstruktioner, till exempel klasser, datamedlemmar eller medlemsfunktioner. Följande är en höjdpunkt på fördelarna med den här nya tekniken:
Exponerar en välbekant och enkel samtalskonvention.
Använder infogad kod, som till skillnad från makron identifieras av felsökningsprogrammet.
Möjliggör enkel härledning från basklasser utan betungande implementeringsinformation.
Ersätter den stora mängd IDL-kod som krävs av en COM-komponent med några koncisa attribut.
Om du till exempel vill implementera en enkel händelsemottagare för en allmän ATL-klass kan du använda attributet event_receiver för en specifik klass, till exempel CMyReceiver
. Attributet event_receiver
kompileras sedan av Microsoft C++-kompilatorn, som infogar rätt kod i objektfilen.
[event_receiver(com)]
class CMyReceiver
{
void handler1(int i) { ... }
void handler2(int i, float j) { ... }
}
Du kan sedan konfigurera CMyReceiver
metoderna handler1
och handler2
hantera händelser (med hjälp av den inbyggda funktionen __hook) från en händelsekälla som du kan skapa med hjälp av event_source.
Grundläggande mekanik för attribut
Det finns tre sätt att infoga attribut i projektet. Först kan du infoga dem manuellt i källkoden. För det andra kan du infoga dem med hjälp av egenskapsrutnätet för ett objekt i projektet. Slutligen kan du infoga dem med hjälp av de olika vägledningar. Mer information om hur du använder fönstret Egenskaper och de olika guiderna finns i Visual Studio Projects – C++.
Precis som tidigare, när projektet skapas, parsar kompilatorn varje C++-källfil och skapar en objektfil. Men när kompilatorn stöter på ett attribut parsas det och verifieras syntaktiskt. Kompilatorn anropar sedan dynamiskt en attributprovider för att infoga kod eller göra andra ändringar vid kompileringstillfället. Implementeringen av providern varierar beroende på typ av attribut. Till exempel implementeras ATL-relaterade attribut av Atlprov.dll.
Följande bild visar relationen mellan kompilatorn och attributprovidern.
Anmärkning
Attributanvändningen ändrar inte innehållet i källfilen. Den enda gången som den genererade attributkoden visas är under felsökningssessioner. För varje källfil i projektet kan du dessutom generera en textfil som visar resultatet av attributersättningen. Mer information om den här proceduren /Fx
finns i (Sammanfoga inmatad kod) och Felsök inmatad kod.
Precis som de flesta C++-konstruktioner har attribut en uppsättning egenskaper som definierar deras användning. Detta kallas kontexten för attributet och behandlas i attributkontexttabellen för varje attributreferensavsnitt. Till exempel kan coclass-attributet endast tillämpas på en befintlig klass eller struktur, till skillnad från attributet cpp_quote , som kan infogas var som helst i en C++-källfil.
Skapa ett tillskrivet program
När du har placerat Visual C++-attribut i källkoden kanske du vill att Microsoft C++-kompilatorn ska skapa ett typbibliotek och en .idl-fil åt dig. Följande länkalternativ hjälper dig att skapa .tlb- och .idl-filer:
Vissa projekt innehåller flera oberoende .idl-filer. Dessa används för att skapa två eller flera .tlb-filer och du kan också binda dem till resursblocket. Det här scenariot stöds för närvarande inte i Visual C++.
Dessutom matar Visual C++-länkaren ut all IDL-relaterad attributinformation till en enda MIDL-fil. Det går inte att generera två typbibliotek från ett enda projekt.
Attributkontexter
C++-attribut kan beskrivas med hjälp av fyra grundläggande fält: det mål som de kan tillämpas på (gäller för), om de är repeterbara eller inte (repeterbara), den obligatoriska förekomsten av andra attribut (obligatoriska attribut) och inkompatibiliteter med andra attribut (ogiltiga attribut). De här fälten visas i en tillhörande tabell i varje attributs referensavsnitt. Vart och ett av dessa fält beskrivs nedan.
Gäller för
Det här fältet beskriver de olika C++-språkelementen som är juridiska mål för det angivna attributet. Om ett attribut till exempel anger "klass" i fältet Gäller för anger detta att attributet endast kan tillämpas på en laglig C++-klass. Om attributet tillämpas på en medlemsfunktion i en klass skulle ett syntaxfel uppstå.
Mer information finns i Attribut efter användning.
Upprepningsbar
Det här fältet anger om attributet kan tillämpas upprepade gånger på samma mål. Majoriteten av attributen kan inte upprepas.
Obligatoriska attribut
I det här fältet visas andra attribut som måste finnas (dvs. tillämpas på samma mål) för att det angivna attributet ska fungera korrekt. Det är ovanligt att ett attribut har några poster för det här fältet.
Ogiltiga attribut
Det här fältet visar andra attribut som inte är kompatibla med det angivna attributet. Det är ovanligt att ett attribut har några poster för det här fältet.
Felsöka injekterad kod
Att använda attribut kan förenkla C++-programmering avsevärt. Mer information finns i Begrepp. Vissa attribut tolkas direkt av kompilatorn. Andra attribut matar in kod i programkällan, som kompilatorn sedan kompilerar. Den inmatade koden gör programmeringen enklare genom att minska mängden kod som du måste skriva. Ibland kan dock ett fel orsaka att programmet misslyckas när den kör inmatad kod. När detta händer vill du förmodligen titta på den inmatade koden. Visual Studio innehåller två sätt för dig att se inmatad kod:
Du kan visa inmatad kod i fönstret Disassembly .
Med hjälp av /Fx kan du skapa en sammanslagen källfil som innehåller ursprunglig och inmatad kod.
Fönstret Disassembly visar instruktioner för sammansättningsspråk som motsvarar källkoden och koden som matas in av attribut. Dessutom kan fönstret Disassembly visa källkodsanteckningen.
Aktivera källanteckning
Högerklicka på fönstret Disassembly och välj Visa källkod på snabbmenyn.
Om du känner till platsen för ett attribut i ett källfönster kan du använda snabbmenyn för att hitta den inmatade koden i fönstret Avkodning.
Så här visar du inmatad kod
Felsökningsprogrammet måste vara i avbrottsläge.
I ett källkodsfönster placerar du markören framför attributet vars inmatade kod du vill visa.
Högerklicka och välj Gå till Demontera på snabbmenyn.
Om attributplatsen ligger nära den aktuella körpunkten kan du välja fönstret Avmontering från felsökningsmenyn.
Så här visar du demonteringskoden vid den aktuella körningspunkten
Felsökningsprogrammet måste vara i avbrottsläge.
Välj Debug-menyn, välj Windows, och klicka på Disassembly.
I det här avsnittet
Vanliga frågor och svar om attributprogrammering
Attribut efter grupp
Attribut efter användning
Alfabetisk referens för attribut