ATL 和 MFC 更改:ATL 7.1 和 MFC 7.1

更新:2007 年 11 月

注意   本主题中提到的某些功能在当前的 Visual C++ 版本中可能已不存在。

在 Visual C++ .NET 2003 中已对 ATL 和 MFC 库和向导进行了更改,其中某些更改可能会破坏现有代码。

  • 将项目从 ATL 6.0 迁移到 ATL 7.1 (ATL) 时的向导问题

  • CAtlServiceModuleT::InitializeSecurity 已从 CAtlServiceModuleT (ATL) 移除

  • SetRfc822Time 函数已更新

  • 用默认的 ATL 向导创建的项目在 Windows NT 上将失败

将项目从 ATL 6.0 迁移到 ATL 7.1 时的向导问题

在将 Visual C++ 6.0 项目转换为 Visual C++ .NET 2003 项目时,消息处理程序被添加到消息映射的末尾。如果消息映射具有 CHAIN_*_MAP(...) 条目,则向导添加的项将包括在条目的末尾,并且可能不会被处理。

例如,在将包含 Visual C++ 6.0 ATL 控件的项目迁移到 Visual C++ .NET 2003 项目时,永远不会调用 OnInitDialog 处理程序。这是因为 MESSAGE_HANDLER 放置于 CHAIN_MSG_MAP(...) 条目之后,而不是该条目之前。

为了确保调用 OnInitDialog 处理程序,CHAIN_MSG_MAP(CComControl<Name of class>) 一行必须包括在 CHAIN_MSG_MAP(...) 条目的末尾。或者,OnInitDialog 基类实现应执行必需的初始化。

CAtlServiceModuleT::InitializeSecurity 已从 CAtlServiceModuleT 移除

在 Visual Studio .NET 2003 中,此方法未在基类中实现。有关详细信息,请参见 CAtlServiceModuleT::InitializeSecurity

SetRfc822Time 函数已更新

为了避免可能出现的缓冲区溢出,SetRfc822Time 函数现在具有额外的参数和返回值,指示存储返回的时间数据所需字符串的长度。

用默认的 ATL 向导创建的项目在 Windows NT 上将失败

在 Visual Studio .NET 2003 中,MIDL 编译器默认设置为 /robust,这将导致在 Windows NT 4 下运行的项目停止响应。

将 MIDL 编译器标志更改为 /no_robust

  1. 右击项目,并在快捷菜单上单击“属性”。

    出现“项目属性”对话框。

  2. 在左窗格中单击**“MIDL”**,然后选择“命令行”。

  3. 在“附加选项”文本框中输入 /no_robust

请参见

参考

ATL 和 MFC 更改