共用方式為


編譯器選項巨集

這些宏會控制特定的編譯程式功能。

Macro 描述
_ATL_ALL_WARNINGS 符號,可啟用從舊版 ATL 轉換之專案中的錯誤。
_ATL_APARTMENT_THREADED 定義一或多個物件是否使用 Apartment 線程。
_ATL_CSTRING_EXPLICIT_CONSTRUCTORS 讓特定 CString 建構函式明確,防止任何無意的轉換。
_ATL_ENABLE_PTM_WARNING 定義此宏以要求 C++ 標準語法。 當使用非標準語法來初始化成員函式的指標時,它會產生 C4867 編譯程序錯誤。
_ATL_FREE_THREADED 定義一或多個物件是否使用自由或中性線程。
_ATL_MODULES 可讓您使用 寬鬆的方式編譯 ATL 專案, 並搭配 C++ 模組使用 ATL。
_ATL_MULTI_THREADED 表示專案的物件標示為 「兩者」、「免費」或「中性」的符號。 應該改用宏 _ATL_FREE_THREADED
_ATL_NO_AUTOMATIC_NAMESPACE 防止預設使用命名空間做為 ATL 的符號。
_ATL_NO_COM_SUPPORT 防止 COM 相關程式代碼使用您的項目編譯的符號。
ATL_NO_VTABLE 符號,可防止 vtable 指標在 類別的建構函式和解構函式中初始化。
ATL_NOINLINE 表示函式不應內嵌的符號。
_ATL_SINGLE_THREADED 定義所有物件是否都使用單個線程模型。

_ATL_ALL_WARNINGS

符號,可啟用從舊版 ATL 轉換之專案中的錯誤。

#define _ATL_ALL_WARNINGS

備註

在 Visual C++ .NET 2002 之前,ATL 會停用許多警告,並將它們保留為停用,使其永遠不會顯示在使用者程式代碼中。 具體而言:

  • C4127 條件表示式為常數

  • C4786 'identifier' :標識符在偵錯資訊中截斷為 'number' 字元

  • 使用 C4201 非標準延伸模組:無名稱結構/等位

  • C4103 'filename' :使用 #pragma 套件來變更對齊方式

  • C4291 'declaration' :找不到相符的運算符刪除;如果初始化擲回例外狀況,記憶體將不會釋出

  • C4268 'identifier' :以編譯程式產生的預設建構函式初始化的 'const' 靜態/全域數據會以零填滿物件

  • C4702 無法連線的程序代碼

在從舊版轉換的專案中,連結庫標頭仍會停用這些警告。

若要變更此行為,請在包含連結庫標頭之前,將下列這一行新增至 pch.hstdafx.h 在 Visual Studio 2017 和更早版本中) 檔案中。

#define _ATL_ALL_WARNINGS

如果已新增, #define ATL 標頭會小心保留這些警告的狀態,使其不會全域停用(或使用者明確停用個別警告,而不是啟用它們)。

根據預設,新專案會在 pch.h 中設定此#define專案Visual Studio 2017 和更早版本中的 stdafx.h)。

_ATL_APARTMENT_THREADED

定義一或多個物件是否使用 Apartment 線程。

_ATL_APARTMENT_THREADED

備註

指定 Apartment 線程。 如需其他選項,以及 ATL 物件可用的線程模型描述,請參閱 指定項目的線程模型選項、ATL 簡單物件精靈

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

讓特定 CString 建構函式明確,防止任何無意的轉換。

_ATL_CSTRING_EXPLICIT_CONSTRUCTORS

備註

定義此建構函式時,採用單一參數的所有 CString 建構函式都會使用 explicit 關鍵詞編譯,以防止隱含轉換輸入自變數。 例如,當您嘗試使用char*字串做為CString建構函式自變數時_UNICODE,就會產生編譯程序錯誤。 在需要防止窄字串和寬字串類型之間的隱含轉換時,請使用這個宏。

_T您可以在所有建構函式字串自變數上使用 宏,不論是否已_UNICODE定義,都可以定義_ATL_CSTRING_EXPLICIT_CONSTRUCTORS並避免編譯錯誤。

_ATL_ENABLE_PTM_WARNING

定義這個宏,以強制使用 ANSI C++ 標準符合標準語法的成員函式指標。 使用此宏會導致使用非標準語法來初始化成員函式的指標時,產生 C4867 編譯程序錯誤。

#define _ATL_ENABLE_PTM_WARNING

備註

ATL 和 MFC 連結庫已變更,以符合 Microsoft C++ 編譯程式改善的標準 C++ 一致性。 根據 ANSI C++ 標準,類別成員函式指標的語法應該是 &CMyClass::MyFunc

未定義時 _ATL_ENABLE_PTM_WARNING (預設案例),ATL/MFC 會停用宏對應中的 C4867 錯誤(尤其是訊息對應),以便舊版中建立的程式碼可以如往前一樣繼續建置。 如果您定義 _ATL_ENABLE_PTM_WARNING,您的程式代碼應該符合 C++ 標準。

不過,非標準表單已被取代。 您必須將現有的程式代碼移至 C++ 標準語法。 例如,下列程式碼:

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

應變更為:

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

若為 map 宏,請新增 ampersand '&' 字元。 您不應該在程式代碼中再次新增字元。

_ATL_FREE_THREADED

定義一或多個物件是否使用自由或中性線程。

_ATL_FREE_THREADED

備註

指定免費線程。 免費線程相當於多線程 Apartment 模型。 如需 ATL 物件可用的線程模型描述,請參閱 為其他線程選項指定項目的線程模型選項、ATL 簡單物件精靈

_ATL_MODULES

可讓您使用 編譯 ATL 專案, permissive- 並搭配 C++ 模組使用 ATL。

_ATL_MODULES

_ATL_MULTI_THREADED

表示專案的符號具有標示為 「兩者」、「免費」或「中性」的物件。

_ATL_MULTI_THREADED

備註

如果定義此符號,ATL 會提取程式代碼,以正確同步存取全域數據。 新的程式代碼應該改用對等的宏 _ATL_FREE_THREADED

_ATL_NO_AUTOMATIC_NAMESPACE

防止預設使用命名空間做為 ATL 的符號。

_ATL_NO_AUTOMATIC_NAMESPACE

備註

如果未定義此符號,包括 atlbase.h 預設會執行 using namespace ATL ,這可能會導致命名衝突。 若要避免這種情況,請定義此符號。

_ATL_NO_COM_SUPPORT

防止 COM 相關程式代碼使用您的項目編譯的符號。

_ATL_NO_COM_SUPPORT

ATL_NO_VTABLE

符號,可防止 vtable 指標在 類別的建構函式和解構函式中初始化。

ATL_NO_VTABLE

備註

如果 vtable 指標無法在類別的建構函式和解構函式中初始化,則連結器可以排除 vtable 及其指向的所有函式。 展開至 __declspec(novtable)

範例

class ATL_NO_VTABLE CMyClass2 :

ATL_NOINLINE

表示函式不應內嵌的符號。

    ATL_NOINLINE inline
    myfunction()
    {
    ...
    }

參數

myfunction
不應該內嵌的函式。

備註

如果您想要確保函式不會內嵌編譯程式,請使用這個符號,即使它必須宣告為內嵌,讓它可以放在頭檔中也一樣。 展開至 __declspec(noinline)

_ATL_SINGLE_THREADED

定義所有物件是否都使用單個線程模型

_ATL_SINGLE_THREADED

備註

指定物件一律會在主要 COM 線程中執行。 如需 ATL 物件可用的線程模型描述,請參閱 為其他線程選項指定項目的線程模型選項、ATL 簡單物件精靈

另請參閱

巨集