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
Domyślne konfiguracje projektu ATL
Koncepcje
Programowanie za pomocą kodu ALT i C Run-Time
Inne zasoby
Tworzenie projektów wykorzystujących interfejs Pulpitu za pomocą kreatorów aplikacji