簡體   English   中英

如何使用ifdef檢測是否支持Windows DWORD_PTR類型?

[英]How to detect if the Windows DWORD_PTR type is supported, using an ifdef?

Windows API中有一些新的整數類型支持Win64。 他們並不總是受到支持; 例如, 它們不存在於MSVC6中

如何編寫#if條件來檢測<windows.h>是否支持這些類型?

(我的代碼需要在許多不同版本的Microsoft Visual C ++下編譯,包括MSVC6。所以我需要提供我自己的這些類型的定義, #if在新的編譯器中禁用它們)。

(對於搜索者,完整的類型列表是:DWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR)

對於MSVC 6 [1200, 1300)MSC_VER是在[1200, 1300)范圍內的值。因此,您可以使用#if MSC_VER>=1200 && MSC_VER<1300

編輯:正如安德斯所說,這不是“我的編譯器MSVC 6”之外的測試的有效性。 但是,您也可以使用:

#if defined(MAXULONG_PTR)

由於DWORD_PTR是值類型,因此它具有在basetsd.hbasetsd.h定義的最大值。

由於這些類型是typedef,因此沒有一種很好的,可靠的方法來確定它們是否在預處理器階段定義。 MSN建議測試編譯器版本非常好,但正如Anders在評論中指出的那樣,可能正在使用更新的SDK(我認為VC6是通過2003 SDK支持的 - 我不確定這些類型是否在那里SDK或不)。

您可以檢查SDK確實定義為使用這些類型的宏,例如GetWindowLongPtr

#if !defined( GetWindowLongPtr)
typedef DWORD DWORD_PTR;
#endif

Kludgy,但我想你可能會被Kludgy困住。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM