Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++ 救命啊!错误C2040:&x27;HWINEVENTHOOK';:';德沃德';与';HWINEVENTHOOK';_C++_Windows_Visual C++_Sdk - Fatal编程技术网

C++ 救命啊!错误C2040:&x27;HWINEVENTHOOK';:';德沃德';与';HWINEVENTHOOK';

C++ 救命啊!错误C2040:&x27;HWINEVENTHOOK';:';德沃德';与';HWINEVENTHOOK';,c++,windows,visual-c++,sdk,C++,Windows,Visual C++,Sdk,我正在一个新的盒子(vista 64)上编译我的应用程序,现在它不再编译了。编译器给了我标题中的错误。问题似乎是,HWINEVENTHOOK在中定义了两次 windef.h #if(WINVER >= 0x0400) DECLARE_HANDLE(HWINEVENTHOOK); #endif /* WINVER >= 0x0400 */ 然后在winable.h中是 #if WINVER < 0x0500 // these structures and functions

我正在一个新的盒子(vista 64)上编译我的应用程序,现在它不再编译了。编译器给了我标题中的错误。问题似乎是,HWINEVENTHOOK在中定义了两次

windef.h

#if(WINVER >= 0x0400)
DECLARE_HANDLE(HWINEVENTHOOK);
#endif /* WINVER >= 0x0400 */
然后在winable.h中是

#if WINVER < 0x0500 // these structures and functions
                    // are in NT 5.00 and above winuser.h
typedef DWORD   HWINEVENTHOOK;
#如果WINVER<0x0500//这些结构和函数
//在NT 5.00及以上的winuser.h中
类型定义DWORD HWINEVENTHOOK;
然而,我刚刚查找了WINVER for vista,它是0x0600,windows XP是0x0501,那么为什么要定义DWORD呢?我不知所措。有人帮忙吗?

根据:

winable.h已从Windows中移动 SDK于2005年7月发布,因为 已在winuser.h中复制。是的 当时决心要努力 最好花在更新上 winuser.h到Windows Vista级别 功能,而不是更新 两个文件的功能

您使用的是什么版本的Windows SDK,您的代码针对的是什么Windows版本?可以在makefile、项目文件或头文件中指定目标Windows版本。在Vista上编译代码并不一定意味着目标版本是Vista

另外,您是否尝试过从winable.h切换到winuser.h?

根据:

winable.h已从Windows中移动 SDK于2005年7月发布,因为 已在winuser.h中复制。是的 当时决心要努力 最好花在更新上 winuser.h到Windows Vista级别 功能,而不是更新 两个文件的功能

您使用的是什么版本的Windows SDK,您的代码针对的是什么Windows版本?可以在makefile、项目文件或头文件中指定目标Windows版本。在Vista上编译代码并不一定意味着目标版本是Vista


另外,您是否尝试过从winable.h切换到winuser.h?

您可能需要显式地将WINVER设置为与目标Windows的最低版本相对应的版本。我怀疑它的默认值并没有比Win2K高多少

您可以使用以下快速(未经测试)的方法检查其默认值:

#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
    printf("WINVER=0x%04x\n", WINVER);
    return 0;
}
#包括
#包括
int main(int argc,字符**argv){
printf(“WINVER=0x%04x\n”,WINVER);
返回0;
}
编译为控制台应用程序并在命令提示符下运行,可能会提供线索。否则,您将花很长时间浏览include文件,试图确定它在哪里设置了默认值


编辑:通常,总是为项目指定WINVER是最安全的。可以在Visual Studio中的项目设置中执行此操作(对于所有生成,而不仅仅是当前生成!),也可以在项目中每个模块包含的公共头文件中执行此操作。显式地这样做将减少不同构建环境可能具有不同假设的可能性。

您可能需要显式地将WINVER设置为与目标Windows的最低版本相对应的版本。我怀疑它的默认值并没有比Win2K高多少

您可以使用以下快速(未经测试)的方法检查其默认值:

#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv) {
    printf("WINVER=0x%04x\n", WINVER);
    return 0;
}
#包括
#包括
int main(int argc,字符**argv){
printf(“WINVER=0x%04x\n”,WINVER);
返回0;
}
编译为控制台应用程序并在命令提示符下运行,可能会提供线索。否则,您将花很长时间浏览include文件,试图确定它在哪里设置了默认值


编辑:通常,总是为项目指定WINVER是最安全的。可以在Visual Studio中的项目设置中执行此操作(对于所有生成,而不仅仅是当前生成!),也可以在项目中每个模块包含的公共头文件中执行此操作。明确地这样做将减少不同构建环境可能有不同假设的可能性。

Ok,切换到winuser.h解决了这个问题。我想我把两者都包括在内了。谢谢你的帮助非常宝贵。我很感激。好的,切换到winuser。h解决了这个问题。我想我把两者都包括在内了。谢谢你的帮助非常宝贵。我很感激。。。。并确保为项目将其设置为相同的值,而不仅仅是一些文件!。。。并确保将其设置为与项目相同的值,而不仅仅是某些文件!