我正在 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'.
最佳答案
它位于 winsock2.h
中,按照the MSDN docs并且,来 self 的开发系统(在 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
。
根据内存,解决此问题的一种方法是在包含 windows.h
之前定义 WIN32_LEAN_AND_MEAN
。这将阻止包含一些较少使用的 header 。
另一种方法是在包含 windows.h
之前定义 _WINSOCKAPI_
- 这将阻止包含 winsock.h
。
第三种(可能是更好的)方法是简单地将 winsock2.h
包含在 之前 windows.h
中。 winsock2.h
定义了 _WINSOCKAPI_
,因此与上一段具有相同的效果。
关于c - 在哪里可以找到 ntohl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9355785/