问一个关于winsock2.h与winsock.h相互冲突的问题,寻高手解决

macrosu 2005-05-09 10:29:12
我用VC++新建了一个空win32程序(名称snc).
此程序属性栏内,我选择编译为 C 代码(/TC)(此点不能更改),
运行库为多线程(/MT),
在主文件snc.c中有" include <winsock2.h> "一句,
但一编译就出现很多错误,即说winsock2.h与winsock.h有很多重复定义的宏,
我仅在snc.c文件中包含了winsock2.h,别的地方没有包含,也没包含winsock.h文件,
程序若更改为编译为c++代码就没有错误发生.
具体错误剪贴部分于下:
========================================================================
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(109) : error C2011: “fd_set” : “struct”类型重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(54) : 参见“fd_set”的声明
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(144) : warning C4005: “FD_SET” : 宏重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(88) : 参见“FD_SET”的前一个定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(153) : error C2011: “timeval” : “struct”类型重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(97) : 参见“timeval”的声明
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(209) : error C2011: “hostent” : “struct”类型重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(153) : 参见“hostent”的声明
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(222) : error C2011: “netent” : “struct”类型重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(166) : 参见“netent”的声明
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock2.h(229) : error C2011: “servent” : “struct”类型重定义
G:\Visual_Studio_NET_2003\Vc7\PlatformSDK\Include\WinSock.h(173) : 参见“servent”的声明
=============================================================================
我的snc.c文件内容简介如下:
=========================
#include <windows.h>
#include <winsock2.h>
#pragma comment(lib,"WS2_32.lib")

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){

DoSomething();

return 0;
}

==========================
...全文
535 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qrlvls 2005-05-09
  • 打赏
  • 举报
回复
VC 6 中好象没有这个问题
wy99sinacom 2005-05-09
  • 打赏
  • 举报
回复
在默认windows.h会包含winsock.h,当你包含winsock2.h就会冲突,因此在包含windows.h前需要定义一个宏,去除winsock。h包含

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
macrosu 2005-05-09
  • 打赏
  • 举报
回复
找了半天,终于在windows.h中看到了有这么一句:
#ifndef _MAC
#include <winperf.h>
#include <winsock.h>
#endif

很明显的,俺的不是 -MAC,被windows.h载入了winsock.h,导致winsock2.h和winsock.h中有很多
宏和函数定义重复,斗胆用 //#include <winsock.h>注释掉了,结果编译成功,运行也没出问题,
不知道这样对程序以及以后编写的有没影响,也不明白把程序改为编译成c++代码为啥就没问题,
难到ms为了推销vc++.net就暗中动了手脚?值得怀疑额...
谁还有更好的解决办法,烦请指点下,加分送上.

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧