第1章 托管类型 1
1.1 Visual C++ .NET中的新关键字 1
1.1.1 MSIL和标准代码 4
1.1.2 C++基元类型 6
1.2 托管类型和值类型 8
1.2.1 托管对象 9
1.2.2 值类型 15
1.2.3 托管指针 20
1.2.4 通过引用传递和通过值传递 23
1.2.5 属性 24
1.2.6 委托和事件 27
1.2.7 属性(attribute) 32
1.2.8 托管接口 37
1.2.9 托管字符串 43
1.2.10 托管数组 47
1.2.11 异常和托管代码 55
1.3 实现.NET类型 61
1.3.1 命名空间 61
1.3.2 继承 63
1.3.3 导出和导入类型 65
1.3.4 强制类型转换和转换 70
1.3.5 托管操作符 72
1.3.6 创建和销毁对象 74
1.3.7 入口点 76
1.4 本章小结 77
第2章 Interop 79
2.1 It Just Works! 80
2.1.1 标准C++类 80
2.1.2 CRT和静态链接库 89
2.1.3 C++标准库 90
2.1.4 非托管类型中的托管指针 90
2.1.5 全局方法 93
2.2 平台调用 94
2.2.1 DllImport 95
2.2.2 平台调用的背后 99
2.2.3 平台调用和参数 100
2.2.4 用IJW调用Win32 API 106
2.2.5 封送拆收处理 110
2.3 异常 113
2.4 COM Interop 116
2.4.1 .NET和COM对象 116
2.4.2 工具 120
2.4.3 .NET COM属性 122
2.4.5 在.NET中使用COM类型 125
2.4.4 .NET框架定义的接口 125
2.4.6 在COM中使用.NET类型 127
2.4.7 异常 128
2.4.8 封送.NET对象 129
2.4.9 线程 130
2.4.10 COM+ Interop 130
2.5 本章小结 131
第3章 委托和事件 133
3.1 将委托作为类型安全的函数指针 133
3.1.1 非托管代码的函数指针 134
3.1.2 函数指针和全局函数 136
3.1.3 委托 137
3.1.4 动态创建委托 141
3.1.5 委托参数 142
3.1.6 多点传送委托 143
3.1.7 将委托作为智能函数指针 146
3.1.8 异常和委托 147
3.1.9 委托和Interop 148
3.1.10 封送委托 151
3.2 异步编程 153
3.2.1 参数和异步委托 153
3.2.2 异步调用委托 154
3.2.3 异步调用和异常 161
3.2.4 异步调用和.NET框架类库 163
3.3 托管事件 164
3.3.1 .NET框架和事件 166
3.3.2 统一事件模型 168
3.3.3 COM事件 172
3.4 编写多线程代码 177
3.4.1 托管线程 177
3.4.2 线程状态 183
3.4.3 前台线程和后台线程 184
3.4.4 线程本地数据 185
3.4.5 线程和异常 188
3.4.6 同步对象 190
3.4.7 线程池 193
3.4.8 被同步的上下文 195
3.5 本章小结 197
第4章 用户界面开发 199
4.1 用C++开发Windows窗体 199
4.1.1 组件和容器 201
4.1.2 生成GUI应用程序 214
4.2 使用GDI+ 217
4.2.1 图形类 218
4.2.2 坐标结构 221
4.2.3 坐标转换 222
4.2.4 剪辑区域 225
4.2.5 颜色 226
4.2.6 笔 227
4.2.7 画刷 228
4.2.8 位图 229
4.2.9 光标 231
4.2.10 图标 232
4.2.11 文本和字体 232
4.2.12 图形路径 233
4.2.13 区域 234
4.3.1 WndProc的位置 235
4.3 控件和窗体 235
4.3.2 标准Windows控件 239
4.3.3 异常 240
4.3.4 事件、属性和状态 241
4.3.5 控件和ActiveX接口 243
4.3.6 控件句柄 246
4.3.7 拖放 247
4.3.8 超类处理 250
4.3.9 标准窗体 250
4.3.10 事件处理策略 251
4.3.11 使用Windows头文件 253
4.4 使用托管资源 254
4.4.1 程序集和Win32资源 255
4.4.2 托管资源 256
4.4.3 已编译的托管资源 257
4.4.4 本地化 260
4.5 本章小结 262
第5章 系统编程 263
5.1 程序集 263
5.1.1 可移植可执行文件 263
5.1.2 元数据目录 265
5.1.3 读取元数据 267
5.1.4 程序集格式 272
5.1.5 程序集的配置 275
5.1.6 版本控制和Fusion 292
5.2 安全 298
5.2.1 代码访问安全性 298
5.2.2 基于角色的安全策略 301
5.2.3 可检验的代码 303
5.3 非托管.NET服务API 303
5.3.1 枚举托管进程 304
5.3.2 获取垃圾回收器的信息 307
5.3.3 承载.NET运行库 308
5.4 本章小结 310
6.1.1 命令 311
6.1 Visual Studio .NET IDE 311
第6章 用Visual C++ .NET构建代码 311
6.1.2 项目、解决方案和配置 315
6.1.3 Visual Studio .NET中的选项 326
6.1.4 编辑代码 326
6.1.5 Visual Studio .NET命令行 333
6.1.6 DTE对象 335
6.1.7 Visual C++ 7库 337
6.2 项目类型 338
6.2.1 托管应用程序 340
6.2.2 托管类库 342
6.2.4 生成文件项目 343
6.2.3 托管对象文件和模块 343
6.2.5 托管Web服务 344
6.2.6 Web服务客户 348
6.2.7 注释Web页 349
6.3 编译代码 350
6.3.1 编译器开关 351
6.3.2 链接器天关 353
6.3.3 优化 353
6.3.4 生成步骤 354
6.4 常见解决方案示例 355
6.4.1 多程序集解决方案 355
6.4.2 多模块解决方案 357
6.4.3 使用资源的项目 358
6.4.4 带有附属程序集的解决方案 359
6.5 本章小结 359
第7章 调试 361
7.1 编写可调试代码 361
7.1.1 可调试代码 362
7.1.2 .NET条件代码 364
7.1.3 跟踪代码 365
7.1.4 断言 378
7.2 符号文件和托管代码 386
7.3.1 查找程序集 391
7.3 使用Visual Studio .NET调试器 391
7.3.2 启动调试器 393
7.3.3 调试进程 398
7.3.4 调试混合代码 408
7.3.5 调试多线程代码 409
7.3.6 跨应用程序域调试 411
7.3.7 远程调试 412
7.4 分析 414
7.4 本章小结 422
附录A .NET框架库 425
附录B 参考资源 433