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