【发布时间】:2015-12-05 01:15:12
【问题描述】:
我有一个应该在 XP 及更高版本中运行的 Windows 应用程序。但是 Windows API for XP 通常不同于 vista 及更高版本。我可以检查哪些条件编译标志来确定代码正在为哪些 Windows 操作系统编译?如果没有,有什么办法可以做到这一点?
我认为它应该是这样的:
void SomeClass::SomeFunction()
{
// Other code
#ifdef WINXP
windowsXPCall();
#else
WindowsCall();
#endif
// Other code
}
【问题讨论】:
-
我相信系统库:cplusplus.com/reference/cstdlib/system可以用来运行可执行文件。使用它,您可以运行类似于 Windows 版本检查器的东西。然而,这只会在运行时发生,并且在编译时可能没有那么有用。不知道这是否能解决你的问题,但祝你好运:)
-
您通常不会为 Windows XP 构建单独的应用程序,而是构建适用于 XP 和更高版本的单个应用程序。有时这意味着只使用 WindowsXPCall,在大多数情况下,它在以后的版本中仍然可用,有时这意味着决定在运行时进行哪个调用。
-
如果您真的想构建一个单独的可执行文件,您可以按照this question 检测 XP 工具集的使用情况。
-
@Liang:无需使用单独的应用程序来检测 Windows 版本。 API 提供版本检查工具,但通常最好检测功能而不是版本;例如,您可以使用 GetProcAddress 找出特定 API 函数是否存在。
-
如果你
need to build one executable for all windows platform那么 OP 中的#ifdef WINXP没有意义。这是一个编译时指令,如果你在定义和不定义 WINXP 的情况下编译两次,那么你最终会得到不同平台的不同可执行文件。
标签: c++ windows compilation windows-xp