Share via


Macro's voor compileropties

Opmerking

De ATL (Active Template Library) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Deze macro's bepalen specifieke compilerfuncties.

Macroniveau Description
_ATL_ALL_WARNINGS Een symbool dat fouten in projecten mogelijk maakt die zijn geconverteerd vanuit eerdere versies van ATL.
_ATL_APARTMENT_THREADED Definieer of een of meer van uw objecten appartementthreading gebruiken.
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS Maakt bepaalde CString constructors expliciet, waardoor onbedoelde conversies worden voorkomen.
_ATL_ENABLE_PTM_WARNING Definieer deze macro om C++-standaardsyntaxis te vereisen. Hiermee wordt de C4867-compilerfout gegenereerd wanneer niet-standaardsyntaxis wordt gebruikt om een aanwijzer te initialiseren naar een lidfunctie.
_ATL_FREE_THREADED Definieer of een of meer van uw objecten gratis of neutrale threading gebruiken.
_ATL_MODULES Hiermee kunt u ATL-projecten compileren met machtigingen en ATL gebruiken met C++-modules.
_ATL_MULTI_THREADED Een symbool dat aangeeft dat het project objecten heeft die zijn gemarkeerd als Zowel, Vrij als Neutraal. In plaats daarvan moet de macro _ATL_FREE_THREADED worden gebruikt.
_ATL_NO_AUTOMATIC_NAMESPACE Een symbool dat het standaardgebruik van naamruimte als ATL voorkomt.
_ATL_NO_COM_SUPPORT Een symbool dat voorkomt dat COM-gerelateerde code wordt gecompileerd met uw project.
ATL_NO_VTABLE Een symbool dat voorkomt dat de vtable-aanwijzer wordt geïnitialiseerd in de constructor en destructor van de klasse.
ATL_NOINLINE Een symbool dat aangeeft dat een functie niet inline mag zijn.
_ATL_SINGLE_THREADED Geef aan of al uw objecten gebruikmaken van het model voor één threading.

_ATL_ALL_WARNINGS

Een symbool dat fouten in projecten mogelijk maakt die zijn geconverteerd vanuit eerdere versies van ATL.

#define _ATL_ALL_WARNINGS

Opmerkingen

Vóór Visual C++ .NET 2002 heeft ATL veel waarschuwingen uitgeschakeld en hebben ze uitgeschakeld, zodat ze nooit in gebruikerscode werden weergegeven. Specifiek:

  • Voorwaardelijke expressie C4127 is constant

  • C4786 'id': id is afgekapt tot 'getal' tekens in de foutopsporingsinformatie

  • C4201 niet-standaardextensie gebruikt: naamloze struct/union

  • C4103 'bestandsnaam': gebruikt #pragma pack om uitlijning te wijzigen

  • C4291 'declaratie': er is geen overeenkomende operator verwijderd; geheugen wordt niet vrijgemaakt als initialisatie een uitzondering genereert

  • C4268 'identifier': 'const' statische/globale gegevens geïnitialiseerd met door compiler gegenereerde standaardconstructor vult het object met nullen

  • C4702 onbereikbare code

In projecten die zijn geconverteerd uit eerdere versies, worden deze waarschuwingen nog steeds uitgeschakeld door de kopteksten van bibliotheken.

Als u dit gedrag wilt wijzigen, voegt u de volgende regel toe aan het pch.h bestand (stdafx.h in Visual Studio 2017 en eerder) voordat u kopteksten van bibliotheken opvoegt.

#define _ATL_ALL_WARNINGS

Als dit #define wordt toegevoegd, zijn de ATL-headers voorzichtig om de status van deze waarschuwingen te behouden, zodat ze niet globaal worden uitgeschakeld (of als de gebruiker expliciet afzonderlijke waarschuwingen uitschakelt, niet inschakelen).

Voor nieuwe projecten is deze #define standaard ingesteld in pch.h (stdafx.h in Visual Studio 2017 en eerder).

_ATL_APARTMENT_THREADED

Definieer of een of meer van uw objecten appartementthreading gebruiken.

_ATL_APARTMENT_THREADED

Opmerkingen

Hiermee geeft u appartement threading. Voor andere opties en een beschrijving van de threadingmodellen die beschikbaar zijn voor een ATL-object, raadpleegt u De wizard Threading Model en Opties van project opgeven , ATL Simple Object.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Maakt bepaalde CString constructors expliciet, waardoor onbedoelde conversies worden voorkomen.

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

Opmerkingen

Wanneer deze constructor is gedefinieerd, worden alle CString constructors die één parameter nemen gecompileerd met het expliciete trefwoord, waardoor impliciete conversies van invoerargumenten worden voorkomen. Dit betekent bijvoorbeeld dat wanneer _UNICODE wordt gedefinieerd, als u een char* tekenreeks probeert te gebruiken als een CString constructorargument, een compilerfoutresultaten. Gebruik deze macro in situaties waarin u impliciete conversies tussen smalle en brede tekenreekstypen moet voorkomen.

Door de _T macro te gebruiken voor alle constructortekenreeksargumenten, kunt u compilatiefouten definiëren _ATL_CSTRING_EXPLICIT_CONSTRUCTORS en voorkomen, ongeacht of _UNICODE deze is gedefinieerd.

_ATL_ENABLE_PTM_WARNING

Definieer deze macro om het gebruik van ansi-C++ standaardconforme syntaxis voor aanwijzer naar lidfuncties af te dwingen. Als u deze macro gebruikt, wordt de C4867-compilerfout gegenereerd wanneer niet-standaardsyntaxis wordt gebruikt om een aanwijzer naar een lidfunctie te initialiseren.

#define _ATL_ENABLE_PTM_WARNING

Opmerkingen

De ATL- en MFC-bibliotheken zijn gewijzigd zodat deze overeenkomen met de verbeterde standaard-C++-conformiteit van de Microsoft C++-compiler. Volgens de ANSI C++-standaard moet de syntaxis van een aanwijzer naar een klasselidfunctie zijn &CMyClass::MyFunc.

Wanneer _ATL_ENABLE_PTM_WARNING niet is gedefinieerd (de standaardcase), schakelt ATL/MFC de C4867-fout in macrokaarten (met name berichtkaarten) uit, zodat code die in eerdere versies is gemaakt, kan blijven bouwen zoals voorheen. Als u definieert _ATL_ENABLE_PTM_WARNING, moet uw code voldoen aan de C++-standaard.

Het niet-standaardformulier is echter afgeschaft. U moet bestaande code verplaatsen naar de standaardsyntaxis van C++ . Bijvoorbeeld de volgende code:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, OnMycommand)
END_MESSAGE_MAP()

Moet worden gewijzigd in:

BEGIN_MESSAGE_MAP(CMFCListViewDoc, CDocument)
   ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)
END_MESSAGE_MAP()

Voor kaartmacro's voegt u het en-teken '&' toe. U moet het teken niet opnieuw toevoegen aan uw code.

_ATL_FREE_THREADED

Definieer of een of meer van uw objecten gratis of neutrale threading gebruiken.

_ATL_FREE_THREADED

Opmerkingen

Hiermee geeft u gratis threading. Gratis threading is gelijk aan een multithread appartementsmodel. Zie Het threadingmodel van het project opgeven voor andere threadingopties en opties, atL Simple Object Wizard voor een beschrijving van de threadingmodellen die beschikbaar zijn voor een ATL-object.

_ATL_MODULES

Hiermee kunt u ATL-projecten compileren met permissive- en ATL gebruiken met C++-modules.

_ATL_MODULES

_ATL_MULTI_THREADED

Een symbool dat aangeeft dat het project objecten bevat die zijn gemarkeerd als Beide, Vrij of Neutraal.

_ATL_MULTI_THREADED

Opmerkingen

Als dit symbool is gedefinieerd, haalt ATL code op waarmee de toegang tot globale gegevens correct wordt gesynchroniseerd. Nieuwe code moet in plaats daarvan de equivalente macro _ATL_FREE_THREADED gebruiken.

_ATL_NO_AUTOMATIC_NAMESPACE

Een symbool dat het standaardgebruik van naamruimte als ATL voorkomt.

_ATL_NO_AUTOMATIC_NAMESPACE

Opmerkingen

Als dit symbool niet is gedefinieerd, inclusief atlbase.h standaard, using namespace ATL wat kan leiden tot naamconflicten. Als u dit wilt voorkomen, definieert u dit symbool.

_ATL_NO_COM_SUPPORT

Een symbool dat voorkomt dat COM-gerelateerde code wordt gecompileerd met uw project.

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

Een symbool dat voorkomt dat de vtable-aanwijzer wordt geïnitialiseerd in de constructor en destructor van de klasse.

ATL_NO_VTABLE

Opmerkingen

Als de vtable-aanwijzer niet kan worden geïnitialiseerd in de constructor en destructor van de klasse, kan de linker de vtable en alle functies elimineren waarnaar deze verwijst. Wordt uitgevouwen naar __declspec(novtable).

Example

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

Een symbool dat aangeeft dat een functie niet inline mag zijn.

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

Parameterwaarden

myfunction
De functie die niet inline moet zijn.

Opmerkingen

Gebruik dit symbool als u ervoor wilt zorgen dat een functie niet inline wordt geplaatst door de compiler, ook al moet deze als inline worden gedeclareerd zodat deze in een headerbestand kan worden geplaatst. Wordt uitgevouwen naar __declspec(noinline).

_ATL_SINGLE_THREADED

Definiëren of al uw objecten gebruikmaken van het model voor één threading

_ATL_SINGLE_THREADED

Opmerkingen

Hiermee geeft u op dat het object altijd wordt uitgevoerd in de primaire COM-thread. Zie Het threadingmodel van het project opgeven voor andere threadingopties en opties, atL Simple Object Wizard voor een beschrijving van de threadingmodellen die beschikbaar zijn voor een ATL-object.

Zie ook

Macro's