Visual C++ 2005 库中的更改
更新:2007 年 11 月
以下部分讨论随 Visual C++ 一起提供的库的更新和重大更改。
本节内容
常规库更改
重大更改
在混合模式下,在托管构造函数之前调用本机构造函数。对于单个可执行文件,将在任何托管全局对象的构造函数之前调用所有本机全局对象的构造函数,而不考虑本机和托管对象是否存在于相同的编译单元中。
因此,依赖于在本机构造函数之前调用的托管构造函数的应用程序可能会以错误的方式运行。
如果全局对象之间存在依赖项,则应确保仅存在从托管对象到本机对象的依赖项。确保某个对象为托管对象或本机对象最佳方式是将其放入以该方式生成的编译单元中。
用于支持基于清单生成程序集的库更改
从 Visual C++ 2005 开始,标准 C++ 库和 ATL 库、MFC 库以及 CRT 库都是带有清单的并行共享程序集。类似地,编译器和链接器设置现在默认为使用 mt.exe 生成清单。这将确保所有 Visual C++ 可执行文件都具有引用它们与 ATL、MFC 和 CRT 依赖关系的清单。有关详细信息,请参见 Visual C++ Libraries as Shared Side-by-Side Assemblies、部署 (C++) 和 生成 C/C++ 独立应用程序和并行程序集。
如果使用生成文件来生成项目,请参见 如何:将清单嵌入到 C/C++ 应用程序。
混合程序集的库支持
Visual C++ 2005 支持将标准的 C++ 库以及 ATL、MFC 和 CRT 库用作使用 /clr 编译的混合程序集。当您的代码中混合有本机代码和基于 MSIL 的 __clrcall 代码时,这些混合库允许您使用它们所有的现有函数。有关更多信息,请参见 混合(本机和托管)程序集。
混合程序集的初始化
Visual C++ 2005 中的库支持更改解决了存在于 Visual C++ .NET 和 Visual C++ .NET 2003 的混合 DLL 中的“加载程序锁定”问题。但仍然有一个限制,即您的 DllMain 代码决不可以访问 CLR。有关更多信息,请参见 混合(本机和托管)程序集。
Pure 模式编译所不支持的库
在 Visual C++ 2005 中,纯模式编译 (/clr:pure) 不支持 ATL 和 MFC 库。