繁体   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