Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用ifdef检测是否支持Windows DWORD_PTR类型?_C++_C_Windows_Visual C++_Win64 - Fatal编程技术网

C++ 如何使用ifdef检测是否支持Windows DWORD_PTR类型?

C++ 如何使用ifdef检测是否支持Windows DWORD_PTR类型?,c++,c,windows,visual-c++,win64,C++,C,Windows,Visual C++,Win64,Windows API中有支持Win64的功能。他们并不总是得到支持;e、 g 如何编写#if条件来检测是否支持这些类型 (我的代码需要在微软Visual C++的许多不同版本中编译,包括MVC6。所以我需要提供这些类型的定义,如果 > ,在新编译器中禁用它们。 (对于搜索者,完整的类型列表是:DWORD_PTR、INT_PTR、LONG_PTR、UINT_PTR、ULONG_PTR)宏MSC_VER是一个在[1200,1300)用于MSVC 6。因此,如果MSC_VER>=1200,您可以使用

Windows API中有支持Win64的功能。他们并不总是得到支持;e、 g

如何编写
#if
条件来检测
是否支持这些类型

(我的代码需要在微软Visual C++的许多不同版本中编译,包括MVC6。所以我需要提供这些类型的定义,如果<代码> > <代码>,在新编译器中禁用它们。


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

MSC_VER
是一个在
[1200,1300)
用于MSVC 6。因此,如果MSC_VER>=1200,您可以使用
&&MSC_VER,因为这些类型是typedef,所以没有一个好的、可靠的方法来确定它们是否是在预处理器阶段定义的。MSN关于测试编译器版本的建议非常好,但正如Anders在评论中指出的,一个更新的SDK可能会出现正在使用(我认为VC6是通过2003 SDK支持的-我不确定这些类型是否在该SDK中)

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

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

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

仅仅因为编译器是VC6并不意味着这些类型没有定义,通常您会使用VC6以及一些最新的平台sdkAnders的评论应该是公认的答案,更新您的平台sdk,不要试图围绕它的过时版本进行编码。盲目:我们提供向客户提供源代码。如果我们要求VC6支持,我们的代码需要正常工作。需要更新的平台SDK会导致没有或配置不正确的人致电支持。这会让客户感到恼火,耗费他们的时间(=因产品延迟而失去销售机会)我们需要时间和金钱来回应。我们可以说“需要VC2003”,因为这是一条让人们理解的足够简单的消息。我们最终会这样做……但还没有。我想建议#如果定义检查UintToPtr宏,它似乎是在我2003年的平台sdk中定义的,但不是旧的vc6头,但GWLP非常酷。我不确定GWLP是否是x64上的宏,所以可能需要一个!\u WIN64检查或者您可以检查GWLP_*defines。或者MAXULONG_PTR。因为没有它您就不会有DWORD_PTR。
#if !defined( GetWindowLongPtr)
typedef DWORD DWORD_PTR;
#endif