Microsoft Visual C++ .NET 2002 提供了许多新增的和改进的功能。
托管代码和面向 .NET Framework
属性化编程
Visual C++ 编译器、链接器和 Visual C++ 语言
开发环境
资源编辑器
库
应用程序的部署和重新发布
Visual C++ .NET 示例
Visual C++ 引入了两种编写托管代码的方法。这两种方法都旨在简化 COM 编程,并且使程序能够访问由 .NET 公共语言运行库提供的服务,如垃圾回收和语言互操作性。
C++ 托管扩展 通过使用这些扩展,您可继续在现有程序中编写 C++ 代码。
Visual C# C# 是一种简单、类型安全和面向对象的新型编程语言。C# 是从 C 和 C++ 演变而来的,旨在使开发人员创建新的 .NET Framework 应用程序。
属性旨在提供一种快捷有效的方法来简化使用 Visual C++ 进行的 COM 编程。属性与 C++ 关键字一样,都是在源文件中使用并由编译器进行解释。属性可以修改现有代码的行为,甚至可以插入附加框架代码来完成基本任务,例如实现 ActiveX 控件、创建类工厂或者设置数据库命令的格式。几乎可以将属性应用到任何 Visual C++ 对象(如类、数据成员以及成员函数)上,还可以将属性作为独立的语句插入到源代码中。
Visual C++ 帮助包括介绍属性化编程的各个方面的属性演练。
下列编译器、链接器、其他生成工具和 Visual C++ 语言的功能是 Visual C++ .NET 的新增功能。Visual C++ .NET 中还包含了标准 C++ 库的更新。
Visual C++ 中的标准遵从性问题。
/AI 编译器选项。
/clr 编译器选项。
/FU 编译器选项。
/Fx 编译器选项。
/GH 编译器选项。
/Gi 编译器选项已从该编译器移除;Visual C++ 编译器不再进行增量编译。/Gi 将被该编译器无提示忽略。
/GD 编译器选项已从编译器中移除。
/GL 编译器选项。
/GS 编译器选项。
与 C++ 托管扩展关联的新关键字。
/Qlfist 现已编入文档。
/O1 和 /O2 现使用 /GF 来替代 /Gf。
/Ox、/O1 和 /O2 现使用 /Ob2 来替代 /Ob1。
/RTC 编译器选项。
/showIncludes 编译器选项。
/w 编译器选项现允许指定特定警告的行为。
/Wall 编译器选项现在允许您启用所有警告,包括默认情况下禁用的警告。
/WL 编译器选项。
/Wp64 编译器选项。
/Y- 编译器选项。
/Zc:forScope 编译器选项。
/Zc:wchar_t 编译器选项。
默认情况下关闭的一列警告。
Boolean 表达式现在类型为 bool,而非 BOOL。
/ALLOWBIND 链接器选项。
/ASSEMBLYMODULE 链接器选项。
/ASSEMBLYRESOURCE 链接器选项。
/COMMENT 链接器选项现已被否决。请使用 comment 杂注。
CVPACK 实用工具已被移除。
/DEBUGTYPE 链接器选项已被移除。 COFF 格式中的符号支持已被移除;现在必须将符号放置在 .pdb 文件中。
/GPSIZE 链接器选项已被移除。链接器现根据是否存在与 GP 相关的到数据的重定位来确定公用变量(未初始化的全局数据项)的最佳位置。
/IDLOUT 链接器选项。
/IGNOREIDL 链接器选项。
/LINK50COMPAT 已被移除。使用 Visual C++ .NET 创建的导入库与 Visual C++ 6.0 兼容。
/LTCG 链接器选项。
/MAPINFO:FIXUPS 已被移除。
/MIDL 链接器选项。
/NOASSEMBLY 链接器选项。
/PDB:NONE 链接器选项已被移除。.exe 中的调试信息已不再受支持。
/PDBSTRIPPED 链接器选项。
/PDBTYPE 链接器选项已被移除。调试信息将被放到单个 .pdb 文件中。
/PROFILE 链接器选项已被移除。如果您正在使用需要 /PROFILE 的第三方探查器,则应改为使用 /FIXED:NO。在此版本中,该链接器仍接受 /PROFILE 作为 /FIXED:NO 的同义词。
源探查器(一个链接器实用工具)已被移除。
/TLBID 链接器选项。
/TLBOUT 链接器选项。
/TSAWARE 链接器选项。
/WARN 链接器选项已被移除。
/CLRHEADER 选项。
DUMPBIN 实用工具的 /IMPORTS 选项现在带有一个可选参数,可用于显示从指定的 DLL 导入的内容。
/PDBPATH 选项。
/RAWDATA 参数已被重命名,但先前版本的语法仍然有效。
/UNWINDINFO 选项。
_AddressOfReturnAddress 关键字现已编入文档。
__alignof 关键字。
现不再支持协变返回类型。
__declspec(align) 关键字。
__declspec(deprecated) 关键字。
__declspec(noinline) 关键字。
__declspec(selectany) 关键字现在支持动态分配的对象(由构造函数初始化的对象)。
__event 关键字。
现已修改了 /Ze 下的 for 语句,使之更加符合标准行为。
__if_exists 和 __if_not_exists 关键字。
__interface 关键字。
现在支持函数 try 块。
__m64 数据类型。
__m128 数据类型。
__m128d 数据类型。
__m128i 数据类型。
MMX、SSE 和 SSE2 内部函数。
__super 关键字。
template 关键字现在允许使用模板参数。
throw(...) 语法。
__assume 编译器内部函数。
__debugbreak 编译器内部函数。
__noop 编译器内部函数。
显式重写。
现在,单个表达式中括号嵌套的层数限制为 256。
_ReturnAddress 关键字现已编入文档。
__sealed 关键字。
__w64 关键字。
wchar_t 现在是一种本机数据类型。
与 C++ 托管扩展关联的新关键字。
conform 杂注。
__COUNTER__ 预定义宏。
deprecated 杂注。
__FUNCDNAME__ 预定义宏。
__FUNCSIG__ 预定义宏。
__FUNCTION__ 预定义宏。
#import 指令:
现在可以按 progid 或 libid 指定类型库。
以下是 #import 指令中的新属性:
embedded_idl
no_dual_interfaces
no_smartpointers
_MANAGED 预处理器指令。
托管和非托管杂注。
pack 杂注现在有一个 show 选项,用于显示当前的压缩值。
pop_macro 现已编入文档。
push_macro 现已编入文档。
runtime_checks 杂注。
section 杂注。
#using 指令。
_WCHAR_T_DEFINED 预处理器指令。
开发环境的以下功能和更改是 Visual C++ .NET 新增的。
“类视图”已被扩展。
在依赖项检查时排除文件(新过程)。
“属性”窗口提供了一个可自定义的网格,用于查看和修改项目中对象的属性。
项目属性页允许指定项目的生成设置。
向导现在是用 HTML 和 JScript 设计的,它们具有支持文本文件,从而使自定义向导的灵活性和可扩展性更高。
WizardBar 和 ClassWizard 已被移除。
自定义生成过程是新的预生成事件。
“新建数据库向导”已从 Visual C++ .NET 中移除。
不再提供导出 NMAKE 生成文件的功能。使用 devenv 命令行开关从命令行生成 Visual C++ 项目。
使用 /Gf 和导入到新版本的 Visual C++ 6.0 项目会将其 /GF 选项转换为 /Gf。
在 Visual C++ 6.0 中,“图像编辑器”工具栏称为“图形”工具栏。虽然工具栏上的按钮(用于绘图、绘制、输入文本、清除和操作视图的工具)基本相同,但是工具栏的行为和外观有一些小小的变化。
在 Visual C++ 6.0 中,“图形”工具栏最初是位于工作区左侧的一个停靠窗口,而“选项”选择器在该工具栏上显示为一个框。在 Visual C++ .NET 中,“图像编辑器”工具栏出现在工作区的顶部。“选项”选择器现在位于“图像编辑器”工具栏的最右侧,并显示为一个带有下拉箭头的按钮。“选项”选择器按钮上的图标随所选择的工具而变化。
“文本工具”对话框的行为已从 Visual C++ 6.0 更改为 Visual Studio .NET。
操作 |
Visual C++ 6.0 中的结果 |
Visual Studio .NET 中的结果 |
---|---|---|
按 Enter |
已将新行输入到文本中。 |
退出文本工具并提交更改。 |
单击“关闭”按钮 |
已退出文本工具并提交了更改。 |
退出文本工具并提交更改。 |
按 Esc |
已退出文本工具并提交了更改。 |
退出文本工具并放弃更改。 |
按 Shift + Enter |
(不适用) |
将新的一行输入到文本中。 |
按 Ctrl + Enter |
(不适用) |
将新的一行输入到文本中。 |
这些更改使文本工具的行为与标准对话框和其他图像编辑器工具的行为更为相似。
说明: |
---|
本主题中提到的某些功能在当前的 Visual C++ 版本中可能已不存在。有关更多信息,请参见 Visual C++ 中的新增功能。 |
Visual C++ .NET 中包含的下列库可能是新增的,也可能是经过更改的。
ATL 项目的默认设置已更改。
更多关于 ATL 方法的参考主题包含代码示例。
支持的集合和枚举有:ICollectionOnSTLImpl、IEnumOnSTLImpl、CComEnumImpl、CComEnumOnSTL 和 CComEnum
新类 CImage 提供增强的位图支持,包括以 JPEG、GIF、BMP 和可移植网络图形 (PNG) 格式加载和保存图像的能力。
管理数组、列表和树的新类有:CAtlArray、CAtlList、CAtlMap、CRBMap 和 CRBMultiMap。
新的字符串转换宏和类。
实用工具类: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 方法已被替换。
CComModule 的功能已分散到若干个新类中。
ATL Server 是一组本机 C++ 类,开发人员可用它来创建 Web 应用程序、XML Web services 以及其他服务器应用程序。许多类还可以用于客户端应用程序或组件。
运行时错误检查函数
如果内存分配失败,new 运算符可能引发异常或返回零。
用 _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.
有关 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 不再执行此操作。
附属 DLL 中本地化资源的增强型支持。
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)有差异,头文件会包含最新的参数类型。
现在可以在任何 Visual C++ 程序中使用许多新增和修改过的类。
标准 C++ 库已更新:
hash_map 类
hash_set 类
可选的异常处理支持。
增强的代码格式设定(可读性)。
增强的 DLL 支持(在进程边界之间传递对象)。
增强的多线程支持。
增强的符合标准性。
对于 Visual C++,不赞成对旧 iostream 库的使用;每次使用 iostream 函数时,就会给出一个警告。在以后的版本中,可能会移除旧的 iostream 库。
说明: |
---|
本主题中提到的某些功能在当前的 Visual C++ 版本中可能已不存在。有关更多信息,请参见 Visual C++ 中的新增功能。 |
若要重新发布 Visual C++ 应用程序,可以使用 Visual Studio 中的部署,它使您能够创建安装程序可执行文件来对文件进行打包并发布到网站。
如果不想使用 Visual Studio 部署,并且拥有本机(而不是托管)Visual C++ 应用程序,则可以查找应用程序的依赖项并开发您自己的安装程序进程。
说明: |
---|
本主题中提到的某些功能在当前的 Visual C++ 版本中可能已不存在。有关更多信息,请参见 Visual C++ 中的新增功能。 |
Visual C++ .NET 包括以下领域的所有新增示例:
C 运行时库
ATL Server
属性
C++ 托管扩展
MASM
调试
自定义向导
说明: |
---|
由于向导结构已更改,因此以前为“自定义向导”提供的示例已不再使用,并已提供了新的“自定义向导”示例。 |
代码模型
项目模型
事件处理
国际化
Tailspin 玩具应用程序
此外,Visual C++ .NET 还包括以下领域的新增示例以及先前版本中提供的示例:
MFC
ATL
COM 支持
标准模板库 (STL)