_WIN32_WINNT 与 LPFN_DISCONNECTEX

工程背景:优化修改IOCP Kernel中的Socket复用策略

查询资料,要复用SOCKET,需要引入LPFN_DISCONNECTEX函数。

增加相关功能类后,编译时报错:

error C2146: 语法错误 : 缺少“;”(在标识符“m_pfnDisconnectEx”的前面)

 

查错过程如下:

1.检查头文件

#include  <mswsock.h>  ----------没有问题

 

2.检查代码,发现

LPFN_ACCEPTEX           m_lpfnAcceptEx;

没有报错,使用右键-定义 可以跳转到mswsock.h文件中,而LPFN_DISCONNECTEX无法跳转到定义。

 

3.在mswsock.h文件中查看定义

原来LPFN_DISCONNECTEX和LPFN_ACCEPTEX有些差别

在LPFN_DISCONNECTEX的定义上面有宏定义

#if(_WIN32_WINNT >= 0x0501)

原因找到了: 没有默认定义_WIN32_WINNT导致的无法使用

 

4. 在stdafx.h中,所有包括的头文件之前,添加

#ifndef _WIN32_WINNT            // 指定要求的最低平台是 Windows Vista。
#define _WIN32_WINNT 0x0501     // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif

编译通过

 

因为没有关注过这个_WIN32_WINNT,折腾了很长时间才解决。

 

 给个标准的定义

#ifndef WINVER      

  • #define WINVER 0×0501
  • #endif
  • #ifndef _WIN32_WINNT
  • #define _WIN32_WINNT 0×0501
  • #endif                       
  • #ifndef _WIN32_WINDOWS    
  • #define _WIN32_WINDOWS 0×0501
  • #endif
  • #ifndef _WIN32_IE           
  • #define _WIN32_IE 0×0601   
  • #endif

     

    如果没有显式定义,则还有一处需要关注到:

    在Project Property –> Configuration Properties–> C/C++  -> Command Line的Additional Options框中输入:

    /D“_WIN32_WINNT=0×0501”

    如果操作系统是Windows server 2003,则上述0×0501处改为0×0502;若为Windows 7,则为0×0601。

     

     

     

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值