BUG: 在Windows Server 2003或Windows XP运行程序出错“无法定位程序输入点FreeAddrinfoW于动态链接库WS2_32.dll上”

来源:http://support.microsoft.com/default.aspx?scid=kb;en-us;822334

症状
当你在Microsoft Windows Server2003 或 Mircosoft Windows XP 上运行允许统一码的、使用了FreeAddrInfo Windows Sockets 函数或者用户助手类,例如,ATL::CSocketAddr 的应用程序时,你可能收到下面的错误信息:
      无法定位程序输入点FreeAddrinfoW于动态链接库WS2_32.dll上

原因
WS2_32.dll库没有输出 FreeAddrInfoW符号,你必须使用统一码版本的FreeAddrInfo函数。

解决方法
根据下面的步骤来解决这个问题:
1、把Atlsocket.h文件复制到你想使用的任意文件夹中。这个文件位于下面的目录中:
 Program Files/Microsoft Visual Studio .NET 2003/Vc7/atlmfc/include


2、在第一步中创建的Atlsocket.h中,加入下面的代码块
//Atlsocket.h
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "mswsock.lib")
//Start of Addition
#if _WIN32_WINNT < 0x0502
  #define ADDRINFOT addrinfo
  #define GetAddrInfo getaddrinfo
  #define FreeAddrInfo freeaddrinfo
#endif
//End of Addition namespace ATL

3、运行Mircosoft Visual C++


4、在工具菜单中单击选项。在选项对话框的左面,打开项目,然后单击VC++目录
 
注意:如果你使用的是Visual C++ Express版本,在选项对话框的左面,打开项目和方案,然后单击VC++目录

5、在选中包含文件栏,然后把Atlsocket.h文件的修改版本所在的目录增加到列表的顶部。


6、重新建立你的应用程序。

状况
Microsoft已经确认在Microsoft产品中存在这个bug,已经在“Applies to”章中列出

更多消息
产生该问题的步骤
1、启动Microsoft Visual Studio .NET 2003
2、打开文件菜单,指向新建,然后单击项目
3、单击项目类型下面的Visual C++项目,然后单击模板下面的Win32控制台项目
4、在名称一栏中输入Sample,单击确定
5、在Win32 应用程序向导对话框中,应用程序设置中单击选中添加支持下的ATL复选框,单击完成按钮
6、在Sample.cpp文件中,用下面的代码代替存在的默认代码。

#include "stdafx.h"
#include <atlsocket.h>

void _tmain()
{
 CSocketAddr aSocketAddr;
}

7、在解决方案资源管理器中右击项目节点,然后选择属性
8、在项目属性页对话框中,单击左面配置属性下的常规。在右面,将字符集属性设置为使用 Unicode 字符集。点击确定
9、在生成菜单中,点击生成解决方案生成应用程序。注意到在生成过程中没有编译错误或链接错误。
10、在调试菜单中,点击开始执行(不调试)。可以注意到,收到了“症状”中描述的错误信息。

 

应用程序碰到这个问题的解决方法:

属于系统问题,你的系统不支持IPv6,升级到SP1/SP2就能解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值