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

王朝system·作者佚名  2007-01-22
窄屏简体版  字體: |||超大  

来源: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就能解决

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航