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ż

Informacje

Kreator projektów ATL

Podstawy obiektów COM ATL

novtable

Domyślne konfiguracje projektu ATL

Koncepcje

Typy projektów Visual C++

Programowanie za pomocą kodu ALT i C Run-Time

Inne zasoby

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