[英]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.h
中basetsd.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.