2012-02-20 53 views
-1

我正在寻找一个窗口上的头文件,我可以用它来获取C中的ntohl函数,但是Winsock2.h不适用于我。有人知道其他头文件会提供什么吗?我在哪里可以找到ntohl

这里有一些错误,我得到的,当我尝试包括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'. 
+5

为什么winsock2.h不会为你工作? – reuben 2012-02-20 03:22:06

+0

我发布了一些我在尝试包含错误时遇到的错误示例。 – 2012-02-20 18:28:19

+0

看起来你想要包括'winsock.h'和'winsock2.h'。这听起来似乎合理吗? – 2012-02-20 21:32:17

回答

0

我最终解决了我自己的问题。我忽略了下载Windows软件开发工具包,并在我的项目中添加包含目录等。我假定我的编译器带有套接字的所有库和头文件。

6

这是winsock2.hthe 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

从内存中,解决这个问题的方法之一是在包含windows.h之前定义WIN32_LEAN_AND_MEAN。这将防止包含一些较少使用的标题。

另一个是在包含windows.h之前定义_WINSOCKAPI_ - 这样可以防止包含winsock.h

第三个(也许是最好的)方法是简单地包括winsock2.h之前windows.hwinsock2.h定义为_WINSOCKAPI_所以具有与上一段相同的效果。

+0

Winsock2.h从来没有为我工作过。每当我试图包含它时,我都会遇到一大堆错误。我会在我的原帖中发表一些例子。 – 2012-02-20 18:18:53

相关问题