Udostępnij za pośrednictwem


Określanie optymalizacji kompilatora projektu ATL

Domyślnie Kreator formantu biblioteki ATL generuje nowe klasy z makra ATL_NO_VTABLE następująco:

class ATL_NO_VTABLE CProjName
{
   ...
};

ATL definiuje następnie _ATL_NO_VTABLE się następujące zmiany:

#ifdef _ATL_DISABLE_NO_VTABLE
   #define ATL_NO_VTABLE
#else
   #define ATL_NO_VTABLE __declspec(novtable)
#endif

Jeśli _ATL_DISABLE_NO_VTABLE nie jest zdefiniowana, makro ATL_NO_VTABLE rozszerza się, aby declspec(novtable).Za pomocą declspec(novtable)w klasie deklaracji zapobiega vtable wskaźnika jest inicjowany w konstruktorze klasy i destruktor.Podczas tworzenia projektu łączący eliminuje Tablica metod wirtualnych i wszystkie funkcje, których punkty Tablica metod wirtualnych.

Należy użyć ATL_NO_VTABLE, a w konsekwencji declspec(novtable), ze tylko podstawowych klas, które nie są bezpośrednio w katalogu.Nie można używać declspec(novtable) z klasy większość pochodnych w projekcie, ponieważ tej klasy (zwykle CComObject, CComAggObject, lub CComPolyObject) inicjuje wskaźnikiem vtable dla projektu.

Nie można wywoływać funkcje wirtualnych z konstruktora dowolny obiekt, który używa declspec(novtable).Należy przenieść te wywołania FinalConstruct metoda.

Jeśli nie jesteś pewien czy powinno się stosować declspec(novtable) modyfikator, można usunąć makro ATL_NO_VTABLE z dowolnej definicji klasy lub można globalnie wyłączyć, określając

#define _ATL_DISABLE_NO_VTABLE

w stdafx.h przed inne biblioteki ATL pliki nagłówkowe są uwzględniane.

Zobacz też

Zadania

Tworzenie projektów wykorzystujących interfejs Pulpitu za pomocą kreatorów aplikacji

Informacje

Kreator projektów ATL

Podstawy obiektów COM ATL

novtable

Domyślne konfiguracje projektu ATL

Koncepcje

Typy projektów Visual C++

Programowanie ATL i kod C Run-Time