我在Windows上寻找一个头文件,我可以使用它来获取C中的ntohl函数,但是Winsock2.h对我来说不起作用。有人知道其他头文件会提供什么吗?
以下是我尝试包含Winsock2.h时出现的一些错误
C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(1045): error #2120: Redeclaration of 'getservbyport', previously declared at C:\Program Files (x86)\PellesC\Include\Win\winsock.h(468); expected 'PSERVENT __stdcall function(int, const char *)' but found 'struct servent * __stdcall function(int, const char *)'.
C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(135): error #2123: Redefinition of 'hostent', previously defined at C:\Program Files (x86)\PellesC\Include\Win\winsock.h(91).
C:\Program Files (x86)\PellesC\Include\Win\ws2def.h(39): error #1050: Redefinition of macro 'AF_IPX'.
C:\Program Files (x86)\PellesC\Include\Win\Winsock2.h(1310): error #2121: Redeclaration of 'LPSOCKADDR_IN'.
答案 0 :(得分:6)
winsock2.h
中的按照the MSDN docs而来自我的开发系统(C:\Program files (x86) Microsoft SDKs\Windows\v7.0A\Include\Winsock2.h
):
WINSOCK_API_LINKAGE u_long WSAAPI ntohl (__in u_long netlong);
我不确定为什么那对你“不起作用”。如果您收到错误消息,则需要发布。
根据您对winsock2.h
遇到问题原因的问题进行编辑,您似乎试图同时包含winsock.h
和winsock2.h
- 这很少是一个好主意: - )它们实际上是根本不兼容的,winsock2
是一个带有额外好处的更高版本。
不幸的是,由于windows.h
在大多数情况下会为您自动包含winsock.h
,因此并不总是在您明显的控制之下。
从内存来看,解决此问题的方法是在包含WIN32_LEAN_AND_MEAN
之前定义windows.h
。这样可以防止包含一些较少使用的标题。
另一个是在包含_WINSOCKAPI_
之前定义windows.h
- 这也会阻止winsock.h
被包含在内。
第三种(也可能是更可取的)方式只是在 winsock2.h
之前加入windows.h
。 winsock2.h
定义_WINSOCKAPI_
,因此效果与前一段相同。
答案 1 :(得分:0)
我最终解决了自己的问题。我忽略了下载Windows软件开发工具包并在我的项目中添加包含目录等。我假设我的编译器带有套接字的所有库和头文件。