当我包含winsock2.h时,我会得到大约60个重定义错误。我找了一些建议,包括winsock2.h b4,包括windows.h。我这样做了,这清除了错误。我的问题和问题确切地涉及到我应该如何做到这一点。我没有明确包含windows.h,它是在stdafx.h或stdafx.cpp中为我完成的。
我立即在stdafx.h中添加了include winsock2.h,包括Windows.h。这是解决这个问题的正确方法还是有更好的方法?
通过program_name.rc中的注释判断我收集stdafx.h中的windows.h include可能因为某些选项或配置参数而被放置在那里但我无法找到此引用。有没有办法指定stdafx.h中包含哪些文件?
BTW,WIN32_LEAN_AND_MEAN被定义为b4在stdafx.h中调用windows.h。
我正在使用Visual c + + 6.0和'Windows Server 2003 PSDK'该程序是直接的c ++,没有mfc,没有网络,只是简单的香草。
答案 0 :(得分:3)
你可以把任何你想要的东西放到stdafx.h中。在windows.h之前添加#include for winsock2.h当然可以。我将移动WIN32_LEAN_AND_MEAN标头,以便在包含任何其他标头之前定义它:
#define WIN32_LEAN_AND_MEAN
#include <winsock2.h>
#include <windows.h>
stdafx.h是预编译头文件的可怕名称。我不知道为什么Visual Studio仍然将它用于所有自动生成的项目。它为预编译的标题提供了不应有的神秘气息。在我的项目中,我通常设置预编译的头文件以使用'precompiled.h'和'precompiled.cpp'。
Noel Llopis有一篇关于预编译标题的精彩文章 - “The Care and Feeding of Precompiled Headers”如果你想了解更多关于这里发生了什么的背景信息。
答案 1 :(得分:0)
这应该可行。如果查看winsock2.h,可以看到它包含windows.h(如果尚未包含它)。
答案 2 :(得分:0)
你需要确保在windows.h之前包含WinSock2.h,确保无论你在哪里包含WinSock2.h,它都包含在stdafx.h和/或windows.h之前