哪里可以找到ntohl

时间:2012-02-20 03:20:29

标签: c winapi header

我在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'.

2 个答案:

答案 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.hwinsock2.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软件开发工具包并在我的项目中添加包含目录等。我假设我的编译器带有套接字的所有库和头文件。