如何使用ifdef检测Windows DWORD_PTRtypes是否受支持?

Windows API中有一些新的整数types可以支持Win64。 他们并不总是得到支持; 例如它们不在MSVC6中 。

如何编写#if条件来检测这些types是否被<windows.h>支持?

(我的代码需要在许多不同版本的Microsoft Visual C ++中编译,包括MSVC6,所以我需要提供我自己的这些types的定义,用#if在较新的编译器中禁用它们)。

(对于search者,types的完整列表是:DWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR)

Solutions Collecting From Web of "如何使用ifdef检测Windows DWORD_PTRtypes是否受支持?"

MSC_VER是一个在MSVC 6范围内的值。所以你可以使用#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,但我认为你可能会被卡鲁奇困住。