【发布时间】:2012-02-05 23:02:39
【问题描述】:
我包含 MySQL C 库所需的内容。
VS2010 中的自动完成功能也显示 - 知道这是什么吗?
它们是否可以互换,一种比另一种有什么优势?
谢谢!
【问题讨论】:
我包含 MySQL C 库所需的内容。
VS2010 中的自动完成功能也显示 - 知道这是什么吗?
它们是否可以互换,一种比另一种有什么优势?
谢谢!
【问题讨论】:
@cost 的回答 links 对一个讨论,除其他外,提出了这个从未回答过的问题:
我不能在winsock2.h之前包含windows.h有什么原因吗? 它给了我很多错误,但是一旦我改变了他们的顺序,一切 没关系……这是为什么呢?
windows.h 在为较新的 Windows 版本编译时包含 winsock2.h,但对于较旧的开发,它包含 winsock.h。不过,问题不仅限于windows.h。任何时候在winsock2.h 之前包含winsock.h,都会出现编译器错误。原因是这两个文件DO NOT 很好地共存。 winsock2.h 旨在替换 winsock.h,而不是扩展它。在winsock.h 中定义的所有内容也在winsock2.h 中定义。如果winsock2.h 包含在winsock.h 之前,则winsock2.h 定义_WINSOCKAPI_ 以防止编译器处理后续的winsock.h 包含,一切都很好。但是如果winsock.h 包含在winsock2.h 之前,winsock2.h 不会检测到它并尝试重新定义winsock.h 已经定义的所有内容,从而导致编译失败。
在同一个项目中混合使用winsock.h 的代码和使用winsock2.h 的代码时必须非常小心。例如,在编写自己的使用winsock2.h 的套接字代码时,以及使用仍然使用winsock.h 的第三方库时。
【讨论】:
除非您想使用 Winsock 1.1,否则您应该使用 winsock2.h。 winsock2.h 用于 Winsock 2。
您可以在Wikipedia Winsock page 上阅读更多相关信息。
【讨论】:
Winsock2 完全向后兼容原始的 Winsock,因此您想要使用原始 Winsock 的唯一原因是您的目标平台不支持 Winsock2(所有比 Windows 3.11 更新的版本都支持 winsock2 I相信)。
【讨论】: