这样的:
新学VC++.NET2008,发现WINDOWS.H里面包含了Winsock.h,然后又查看了WINSOCK.H和WINSOCK2.H产生了很多疑问:1、我创建MFC静态DLL,工程里没发现WINDOWS.H被包含进来啊,难道自动的?2、如果是自动的,那我在使用RECV的时候,调用的是WSOCK32.DLL里的函数了?也就是说,想调用WS2_32.DLL中的RECV的话,必须包含WINSOCK2.H到工程?可如果包含了,不会产生冲突吗,系统知道我用的是哪个RECV啊?3、在WINSOCK.H中RECV是这样的:
int PASCAL FAR recv (
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags);
而在WINSOCK2.H中RECV是这样的:
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags
);
#endif /* INCL_WINSOCK_API_PROTOTYPES */
有什么差异呢?4、如果我想在工程中同时使用WSOCK32.DLL中的函数和WS2_32.DLL里面的函数,应该怎么声明他们呢,又该如何调用呢?先100分吧,不好分配的时候再加!
新学VC++.NET2008,发现WINDOWS.H里面包含了Winsock.h,然后又查看了WINSOCK.H和WINSOCK2.H产生了很多疑问:1、我创建MFC静态DLL,工程里没发现WINDOWS.H被包含进来啊,难道自动的?2、如果是自动的,那我在使用RECV的时候,调用的是WSOCK32.DLL里的函数了?也就是说,想调用WS2_32.DLL中的RECV的话,必须包含WINSOCK2.H到工程?可如果包含了,不会产生冲突吗,系统知道我用的是哪个RECV啊?3、在WINSOCK.H中RECV是这样的:
int PASCAL FAR recv (
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags);
而在WINSOCK2.H中RECV是这样的:
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags
);
#endif /* INCL_WINSOCK_API_PROTOTYPES */
有什么差异呢?4、如果我想在工程中同时使用WSOCK32.DLL中的函数和WS2_32.DLL里面的函数,应该怎么声明他们呢,又该如何调用呢?先100分吧,不好分配的时候再加!
2、winsock.h和winsock2.h是版本不同,具体我也忘记了,可以在网上查下.winsock2.h好像是windows自己出的
afxwin.h包含afx.h
afx.h包含afxver_.h
afxver_.h包含afxv_w32.h
afxv_w32.h包含windows.h
但包含windows.h的时候没有包含winsock.h// Don't include winsock.h
#pragma push_macro("_WINSOCKAPI_")
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
#endif#include <windows.h>#pragma pop_macro("_WINSOCKAPI_")
所以你要使用winsock2的函数就很简单了
#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
回家之后一定要瞅瞅!
产生一个疑惑,那我在输入RECV(的时候,就出现提示了,那个代码提示是哪来的?如果没导入WINSOCK.H的话,IDE咋知道我调用了RECV是WINAPI?还有就是我这时调用的RECV是哪个?WS2_32.DLL还是WSOCK32.DLL?#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib") 这个……链接到WS2_32.lib就是说我这样就用的是WS2_32.DLL了吧于是#include <winsock.h>
#pragma comment(lib, "WSOCK32.lib") 就可以用WSOCK32.DLL了?那我要是鱼和熊掌兼得咋办呀……难不成这样:#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")
#include <winsock.h>
#pragma comment(lib, "WSOCK32.lib") 那我咋指定用哪个库里面的函数啊,不会产生N多冲突吧…………
我还是无法在.NET 2008里使用WINSOCK.H,哎哎哎!即使包含了它,查看RECV什么什么的声明的时候还是在WINSOCK2.H里面,真烦人。
新学VC++.NET2008,发现WINDOWS.H里面包含了Winsock.h,然后又查看了WINSOCK.H和WINSOCK2.H产生了很多疑问:1、我创建MFC静态DLL,工程里没发现WINDOWS.H被包含进来啊,难道自动的?
stdafx.h里包含了各种头文件,当然包括winodws.h。2、如果是自动的,那我在使用RECV的时候,调用的是WSOCK32.DLL里的函数了?也就是说,想调用WS2_32.DLL中的RECV的话,必须包含WINSOCK2.H到工程?可如果包含了,不会产生冲突吗,系统知道我用的是哪个RECV啊?
你要指定链接库嘛!3、在WINSOCK.H中RECV是这样的:
int PASCAL FAR recv (
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags);
而在WINSOCK2.H中RECV是这样的:
#if INCL_WINSOCK_API_PROTOTYPES
WINSOCK_API_LINKAGE
int
WSAAPI
recv(
IN SOCKET s,
__out_bcount_part(len, return) __out_data_source(NETWORK) char FAR * buf,
IN int len,
IN int flags
);
#endif /* INCL_WINSOCK_API_PROTOTYPES */
有什么差异呢?
看MSDN的说明吧4、如果我想在工程中同时使用WSOCK32.DLL中的函数和WS2_32.DLL里面的函数,应该怎么声明他们呢,又该如何调用呢?
包括它们的头文件,并且链接到这些库。先100分吧,不好分配的时候再加!
一看这信息,咱就不是不接贴的人:
zcsor
等级:
可用分等级:中农
总技术分:6887
总技术分排名:3170
结帖率:101.56% 啥么叫牛啊!哈哈哈
windows.h有包含winsock.h#if(_WIN32_WINNT >= 0x0400)
#include <winsock2.h>
#include <mswsock.h>
#else
#include <winsock.h>
#endif /* _WIN32_WINNT >= 0x0400 */