3

Windows API 中有一些新的整数类型支持 Win64。它们并不总是得到支持;例如,它们不存在于 MSVC6 中

如何编写#if条件来检测这些类型是否受支持<windows.h>

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

(对于搜索者,类型的完整列表是:DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR)

4

2 回答 2

5

宏是MSVC 6MSC_VER范围内的值。因此您可以使用.[1200, 1300)#if MSC_VER>=1200 && MSC_VER<1300

编辑:正如安德斯所说,除了“我的编译器 MSVC 6”之外,这并不是真正有效的测试。但是,您也可以使用:

#if defined(MAXULONG_PTR)

由于DWORD_PTR它是一个值类型,它在 中为它定义了一个最大值basetsd.h

于 2010-04-27T17:08:28.867 回答
4

由于这些类型是 typedef,因此没有一种可靠的方法来确定它们是否在预处理器阶段定义。MSN 关于测试编译器版本的建议非常好,但正如 Anders 在评论中指出的那样,可能正在使用更新的 SDK(我认为 VC6 已通过 2003 SDK 得到支持 - 我不确定这些类型是否在其中SDK 与否)。

您可以检查 SDK 确实定义为使用这些类型的宏的内容,例如GetWindowLongPtr

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

Kludgy,但我认为你可能会被 kludgy 困住。

于 2010-04-27T17:26:33.517 回答