Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
正在寻找可以扫描windows api兼容性问题的工具_Windows_Winapi_Visual C++_Testing - Fatal编程技术网

正在寻找可以扫描windows api兼容性问题的工具

正在寻找可以扫描windows api兼容性问题的工具,windows,winapi,visual-c++,testing,Windows,Winapi,Visual C++,Testing,我正在寻找一个工具,可以扫描windows api的兼容性,无论是基于代码扫描或二进制扫描。例如,INetFwPolicy2的最低支持客户端需要Windows Vista,因此如果在XP上使用,它将失败。我想知道是否有一个工具或一个简单的方法来找出这样的操作系统不兼容的问题? 谢谢。这不需要“工具”;SDK头已经使用对版本兼容性敏感的include Guard进行了仔细保护 在包含Windows.h之前,只需定义Windows的目标版本。目标版本不支持的任何符号甚至不会在标题中定义,从而导致编译

我正在寻找一个工具,可以扫描windows api的兼容性,无论是基于代码扫描或二进制扫描。例如,INetFwPolicy2的最低支持客户端需要Windows Vista,因此如果在XP上使用,它将失败。我想知道是否有一个工具或一个简单的方法来找出这样的操作系统不兼容的问题? 谢谢。

这不需要“工具”;SDK头已经使用对版本兼容性敏感的include Guard进行了仔细保护

在包含
Windows.h
之前,只需定义Windows的目标版本。目标版本不支持的任何符号甚至不会在标题中定义,从而导致编译时错误

例如,在预编译的标头中,您可能有:

// Including SDKDDKVer.h defines the highest available Windows platform.
// 
// If you wish to build your application for a previous Windows platform,
// include WinSDKVer.h and set the _WIN32_WINNT macro to the platform
// you wish to support before including SDKDDKVer.h.
#include <WinSDKVer.h>
#define _WIN32_WINNT  _WIN32_WINNT_WINXP   // target Windows XP
#include <SDKDDKVer.h>

#include <Windows.h>
//包括SDKDDKVer.h定义了可用的最高Windows平台。
// 
//如果您希望为以前的Windows平台构建应用程序,
//包括WinSDKVer.h并将_WIN32_WINNT宏设置为平台
//您希望在包含sdkdver.h之前支持。
#包括
#定义WIN32\uWinnt WIN32\uWinnt\uWinXP//目标Windows XP
#包括
#包括
当您使用其中一个内置模板创建新项目时,VisualStudio甚至会自动执行此操作


提供针对各种Windows版本所需的值的完整列表。但最常见的是Windows XP需要的是
\u WIN32\u WINNT\u WINXP
,Windows VISTA/Server 2008需要的是
\u WIN32\u WINNT\u VISTA
,Windows 7/Server 2008 R2需要的是
\u WIN32\u WINNT\u WIN7
,Windows 8需要的是
\u WIN32\u WINNT\u WIN8

这可能是一个好的开始。代码(或二进制代码)会是什么知道它将在什么操作系统上运行吗?或者你只是在收到潜在问题的警告后才这样做的?不幸的是,不时会有一些东西从这些防护装置中溜走,所以这不是万无一失的。@Luke,你有什么例子吗?我从来没有遇到过“溜过去”的事情。事实上,有些东西是不可能从现有的防护中溜走的,所以唯一可能发生的方法是,如果防护从一开始就没有添加到Windows标题中。我猜微软的开发团队是人,总是会犯错误,但我认为这是非常罕见的,可以忽略不计。我不记得我遇到的具体实例,但我相信这是Windows Vista中引入的一个函数。在试图研究它的过程中,我遇到了;但不知道它有多精确,这是怎么回事_WIN32_WINNT_WINXP是在SDKDDKVer.h中定义的。您可能应该在SDKDDKVer.h中使用十六进制常量。例如:#定义_WIN32_WINNT 0x0501