|
发表于 2005-6-24 13:29:00
|
显示全部楼层
Re:[入门级问题]VC 6 和 VC 7的选择
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/vcrefwhatsnewlibrariesvisualc70.asp
Visual C++ .NET 中包含的下列库可能是新增的,也可能是经过更改的。
活动模板库 (ATL)
ATL Server
C 运行时库
Microsoft 基础类 (MFC)
OLE DB 模板
共享类
标准 C++ 库
旧 iostream 库
活动模板库 (ATL)
ATL 项目的默认设置已更改。有关详细信息,请参见默认 ATL 项目配置。
更多关于 ATL 方法的参考主题包含代码示例。
支持集合和枚举数:ICollectionOnSTLImpl、IEnumOnSTLImpl、CComEnumImpl、CComEnumOnSTL、CComEnum。
新类 CImage 提供增强的位图支持,包括以 JPEG、GIF、BMP 和可移植网络图形 (PNG) 格式加载和保存图像的能力。
用于管理数组、列表和树的新增类:CAtlArray Class、CAtlList Class、CAtlMap Class、CRBMap Class 以及 CRBMultiMap 类。
新增字符串转换宏和类:ATL 和 MFC 字符串转换宏。
实用工具类:CAdapt。
宿主 ActiveX 控件:IAxWinAmbientDispatch、IAxWinHostWindow、CAxWindow2。
CComBSTR 和 CComVariant 的增强。
新增宏:OBJECT_ENTRY_AUTO 和 OBJECT_ENTRY_NON_CREATEABLE_EX_AUTO。
简化的对象创建:CComCoClass::CreateInstance。
改进的调试支持:_ATL_DEBUG_INTERFACES。
对 REG_MULTI_SZ 值的注册表支持:CRegKey、创建注册器脚本。
新增安全性类:CAcl、CDacl、CSacl、CSecurityAttributes、CSecurityDesc、CSid、CTokenGroups 和 CTokenPrivileges。
新增数组管理类:CSimpleArray、CSimpleMap、CComSafeArray、CComSafeArrayBound。
Currency 对象类:CComCurrency。
下列 ATL 宏应视为已过时:atlTraceFlags、ATLTrace、BEGIN_OBJECT_MAP、OBJECT_ENTRY、END_OBJECT_MAP。
几个 ATL 方法已被取代:有关详细信息,请参见已过时的 ATL 主题中的“已否决的 ATL 函数”一节。
CComModule 功能已被分布到几个新类中;有关详细信息,请参见 ATL 模块类。
ATL Server
ATL Server 是一组本机 C++ 类,开发人员可用它来创建 Web 应用程序、XML Web services 以及其他服务器应用程序。许多类还可以用于客户端应用程序或组件。
ATL Server 是 Visual C++ 的新增功能。有关更多信息,请参见 ATL Server 和 ATL Server 参考。
C 运行时库
运行时错误检查函数。
如果内存分配失败,new 运算符可能引发异常或返回零。有关更多信息,请参见 new 和 delete 运算符。
使用 _resetstkoflw 从堆栈溢出恢复。
允许使用超过 2038 年的日期的新函数:_ctime64 _wfindnext64 _gmtime64 _wstat64
_wctime64 _fstat64 _localtime64 _time64
_findfirst64 _ftime64 _mktime64 _utime64
_wfindfirst64 _futime64 _stat64 _wutime64
_findnext64
使用 _CrtSetDbgFlag 配置调试堆检查。
确定块和子块类型 _CrtReportBlockType。
数学常数。
新增宽字符函数:_cwprintf _putwch _putws _wtof
新增 __int64 版本的字符串函数:_strtoi64 _strtoui64 _wctoi64 _wcstoui64
新增 Unicode 版本的控制台函数:_getwch _ungetwch() cgetws _getwche
_cwscanf
计算打印格式化数据所需的字符数的新增字符串函数:_scprintf _scwprintf _vscprintf _vscwprintf
_snscanf _snwscanf
数据对齐函数。
_set_security_error_handler,用于注册安全错误处理程序。
由于受 C99 发布的时间所限,此 Visual C++ 版本不符合该标准。
新增的字节交换函数:_byteswap_uint64、_byteswap_ulong、_byteswap_ushort。
_set_SSE2_enable,用于使用 SSE2 指令。
_CrtSetReportHook2。
Microsoft 基础类 (MFC) 库
有关 MFC 的参考主题包含数百个新的代码示例。
静态强制类型转换和 MFC 消息映射 从 Visual C++ .NET 开始,MFC 对消息处理函数的返回类型和参数类型进行更严格的类型检查。这些新增行为通过使用错误信息标记潜在不安全的消息处理函数,来通知开发人员可能会遇到的问题。MFC 现对 ON_MESSAGE、ON_REGISTERED_MESSAGE、ON_THREAD_MESSAGE 和 ON_REGISTERED_THREAD_MESSAGE 使用静态强制类型转换。
例如,过去开发人员可以对 ON_MESSAGE 或 ON_REGISTERED_MESSAGE 使用返回 void 而非 LRESULT 的成员函数,并且编译时不报告任何错误。而使用 Visual C++ .NET,则可以捕获潜在的错误强制类型转换,并将它标记为错误。开发人员可以通过替换返回类型(用 LRESULT 替换)并重新编译来修复这种潜在的问题。
DHTML 编辑组件:CHtmlEditCtrl、CHTMLEditView、CHtmlEditDoc。
DHTML 对话框:CDHtmlDialog、CMultiPageDHtmlDialog。
用于分析参数列表的 ISAPI 支持:CHttpArg、CHttpArgList。
对无窗口控件的支持:COleControlSite、COleControlContainer 和 COccManager。
对在 MFC 应用程序中使用 HTML 帮助的增强支持:显示帮助查看器。
Windows 2000 打印属性表:CPrintDialogEx。
DAO 支持:Visual C++ MFC 应用程序向导和 MFC DLL 应用程序向导不再支持 DAO 数据库项目。但是,仍然可以使用“添加类向导”添加从 DAO 派生的类。对于新的本机 C++ 项目,Microsoft 建议使用 OLE DB 或 ODBC。DAO 只用于维护现有的应用程序。
在此版本中,TRACE0、TRACE1、TRACE2 和 TRACE3 被视为已过时;请使用 ATLTRACE2。Trace 与 ATLTRACE2 具有相同的功能。
在选择对话框字体时,请使用 MS Shell Dlg,而不是 MS Sans Serif 或 Helv 字体。MFC 以前的版本会自动将 MS Sans Serif 或 Helv 替换为 DEFAULT_GUI_FONT 或系统字体,但此版本的 MFC 不再执行此操作。请参见常规 MBCS 编程建议。
对附属 DLL 中的本地化资源的增强支持:MFC 应用程序中的本地化资源:附属 DLL。
OLE DB 模板
Visual C++ 中提供以下 OLE DB 模板:
新增的使用者类
CDataConnection
CDynamicAccessor
CDynamicParameterAccessor
CDynamicStringAccessor
CDynamicStringAccessorA
CDynamicStringAccessorW
CStreamRowset
CXMLAccessor
新增的使用者宏
COLUMN_NAME* 宏,用于按名称绑定到数据库中的特定列。
BLOB* 宏,用于绑定二进制大对象 (BLOB)。
新增的提供程序类
IDBSchemaRowsetImpl
IErrorRecordsImpl
IRowsetChangeImpl
IRowsetCreatorImpl
IRowsetNotifyCP
IRowsetNotifyImpl
IRowsetLocateImpl
IRowsetUpdateImpl
新增的 64 位数据类型
若干 OLE DB 模板类中的方法已经被更改为使用新的 64 位数据类型而不是旧的 32 位数据类型。文档已更新以反映这些变化。如果文档和头文件(atldb.h、atldbcli.h 和 atldbsch.h)有差异,头文件会包含最新的参数类型。
有关更多信息,请参见 MDAC SDK 中的新增功能。
从 Visual C++ 6.0 到 Visual C++ .NET 的重大更改
下面列出了从 Visual C++ 6.0 到 Visual C++ .NET 在 OLE DB 模板中进行的重大更改。您还可以在知识库文章“INFO: Porting Issues with Visual Studio .NET OLE DB Provider Template Classes”(Q321743)(“信息:与 Visual Studio .NET OLE DB 提供程序模板类有关的移植问题”(Q321743))中找到与 OLE DB 模板中的更改有关的更多信息。还可以在 MSDN Library CD-ROM 中或 http://support.microsoft.com/support 上找到知识库文章。
OLE DB 使用者类和模板:
通常,访问器类必须实现附加成员。只有在手动实现自己的访问器类时这才是必需的。如果您的访问器类派生自 CAccessor,则不需要这样做。
Visual C++ 6.0 Visual C++ .NET
CRowset 是类。 CRowset 是类模板并采用一个参数 TAccessor,表示访问器类。
CBulkRowset 是类。 CBulkRowset 是类模板。
CArrayRowset 的基类是模板参数(默认值为 CRowset)。 CArrayRowset 始终从 CBulkRowset 派生。
CDynamicAccessor::GetColumnInfo 采用三个参数。 CDynamicAccessor::GetColumnInfo 具有采用附加参数 ppStringsBuffer 的新形式。使用此参数消除内存泄漏。不赞成使用旧方法。
CAccessorRowset 模板的第二个参数 Rowset 是行集类。 CAccessorRowset 模板的第二个参数 TRowset 是行集类模板。
CTable 模板的第二个参数 Rowset 是行集类。 CTable 模板的第二个参数 TRowset 是行集类模板。
CCommand 模板的第二个参数 Rowset 是行集类。 CCommand 模板的第二个参数 TRowset 是行集类模板。
DEFINE_COMMAND 宏 不赞成使用 DEFINE_COMMAND 宏。 改用 DEFINE_COMMAND_EX。
OLE DB 提供程序类和模板:
许多接口和方法的内部实现自 Visual C++ 6.0 后已经进行了更改。 根据您的应用程序是否重写这些方法,这些更改可能会导致兼容性问题。
Visual C++ 6.0 Visual C++ .NET
行集/访问器实现使用了 CSimpleMap/CSimpleArray 类。用户提供的集合类必须与 CSimpleMap/CSimpleArray 兼容。 行集/访问器实现使用 CAtlMap/CAtlArray 类。用户提供的集合类必须与 CAtlMap/CAtlArray 兼容。此外,应该检查调用这些集合类的方法的代码,因为在可能导致运行时错误的 CAtl* 和 CSimple* 类(参数、返回值等)之间有显著差异。
ICommandImpl 从 ICommand 派生。 ICommandImpl 是从模板的 CommandBase 参数(默认值为 ICommand)派生的模板。
ICommandTextImpl 从 ICommandImpl<ICommandImpl<T> 派生。 ICommandTextImpl 从 ICommandImpl<ICommandImpl<T, ICommandText> 派生。请注意,这里的 ICommandImpl 从 ICommandText(而不是默认的 ICommand)派生。
共享类
现在可以在任何 C++ 程序中使用许多新增和修改过的类。有关详细信息,请参见共享类。
标准 C++ 库
标准 C++ 库已更新:
hash_map Class
hash_set Class
可选的异常处理支持。
增强的代码格式设定(可读性)。
增强的 DLL 支持(在进程边界之间传递对象)。
增强的多线程支持。
增强的符合标准性。
有关标准 C++ 库中的最新更改的信息。
旧 iostream 库
对于 Visual C++,不赞成对旧 iostream 库的使用;每次使用 iostream 函数时,就会给出一个警告。在以后的版本中,可能会移除旧的 iostream 库。
|
|