精通.NET互操作


请输入要查询的图书:

可以输入图书全称,关键词或ISBN号

精通.NET互操作

ISBN: 9787115204349

出版社: 人民邮电出版社

出版年: 2009-5

页数: 419

定价: 68.00元

装帧: 平装

内容简介


《精通.NET互操作P/Invoke,C++Interop和COM Interop》介绍Windows平台上的托管代码与非托管代码之间进行互操作的各种技术,包括由.NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。《精通.NET互操作P/Invoke,C++Interop和COM Interop》包括3部分,平台调用——主要用于解决在托管代码中调用非托管程序设计语言编写的flat API(如Win32 API、C/C++风格的API等)的问题;C++ Interop——技术专门用于解决托管代码与C++编写的非托管代码之间的互操作问题;COM Interop——介绍了使用COM Interop解决在托管代码中调用COM组件,以及在COM中调用托管类型的问题。《精通.NET互操作P/Invoke,C++Interop和COM Interop》适合所有在开发过程中需要涉及到托管代码与非托管代码进行交互操作的.NET开发人员阅读使用。不论是开始学习.NET编程的开发人员,还是刚刚接触互操作的资深.NET开发人员,都能从《精通.NET互操作P/Invoke,C++Interop和COM Interop》中获益。

作者简介


黄际洲,2004—2007年连续四年微软最有价值专家(MVP)。感兴趣的研究方向主要包括自然语言处理、信息检索,聊天机器人等。他曾翻译了三本游戏编程方面的书籍:《Direct 3D中的2D编程》、《游戏编程All in One)及《DirectX角色扮演游戏编程》。

崔晓源,就任于微软亚洲研究院创新工程组,负责前沿研究成果的转化和新产品孵化。曾参与过Live Search拼写检查模块的研发工作。他最喜欢的项目是在线“电脑对联”第二版。目前他正致力于下一代企业搜索技术和社会网络计算相关的研发工作。

目录


第一部分 P/Invoke 第1章 使用C/C++类型的非托管函数 1 1.1 平台调用简介 2 1.2 Hello World!示例程序 3 1.3 获得要调用的非托管函数声明 5 1.4 平台调用基础知识 8 1.5 指定调用约定 11 1.6 指定入口点 13 1.7 指定字符集 16 1.8 处理平台调用中的异常或错误 23 1.8.1 非托管函数的托管定义导致的异常或错误 24 1.8.2 非托管函数导致的异常或错误 30 1.9 释放非托管内存 37 1.9.1 释放由malloc方法分配的非托管内存 38 1.9.2 释放由new运算符分配的非托管内存 44 1.10 动态平台调用 47 1.10.1 平台调用的原理和过程 47 1.10.2 通过手动加载非托管DLL实现动态平台调用 49 1.10.3 利用反射实现动态平台调用 51 1.10.4 利用GetDelegateForFunctionPointer实现动态平台调用 54 1.11 提升平台调用性能的技巧 57 1.11.1 显式地指定要调用的非托管函数的名称 57 1.11.2 对数据封送处理进行优化 60 1.11.3 尽量避免字符串编码转换 66 第2章 平台调用中的数据封送 70 2.1 字符串的封送 71 2.1.1 封送作为参数的字符串 72 2.1.2 封送作为返回值的字符串 80 2.1.3 封送BSTR类型的字符串 82 2.2 封送作为参数的结构体 84 2.3 封送从函数体内部返回的结构体 91 2.3.1 封送作为函数返回值返回的结构体 92 2.3.2 作为函数参数返回结构体 96 2.4 封送结构体中的字符串 98 2.4.1 结构体中的字符指针字段 98 2.4.2 结构体中的字符数组字段 102 2.5 控制结构体字段的封送行为 105 2.6 控制结构体的内存布局 110 2.6.1 定义结构体的部分字段 111 2.6.2 联合体的封送 115 2.7 封送嵌套的结构体 119 2.7.1 指向结构体指针字段的嵌套形式 120 2.7.2 结构体实例字段的嵌套形式 123 2.8 封送类 125 2.8.1 封送引用类型的简单示例 126 2.8.2 封送blittable引用类型 128 2.8.3 将引用类型封送为指向指针的指针 130 2.9 封送数组 132 2.9.1 封送简单类型数组 132 2.9.2 封送字符串数组 135 2.10 实战演练 139 2.10.1 背景介绍 139 2.10.2 模块介绍 140 2.10.3 实现平台调用 144 第3章 使用平台调用技术调用Win32 API 150 3.1 确定要调用的函数 151 3.2 处理Win32函数返回的错误码 156 3.3 处理回调函数 160 3.4 使用Windows定义的常量 166 3.5 封送Win32数据类型 176 3.5.1 可直接复制到本机结构中的数据类型 176 3.5.2 非直接复制到本机结构中的数据类型 177 3.6 处理句柄 179 3.7 传递托管对象 186 3.8 使用P/Invoke调用Win32 API的最佳实践 190 3.8.1 编码规范 190 3.8.2 性能 192 3.8.3 安全性 205 3.8.4 尽量使用Win32函数对应的.NET托管实现 207第二部分 C++ Interop 第4章 C++ Interop 210 4.1 从托管C++代码中调用非托管函数 211 4.1.1 使用平台调用技术调用非托管函数 211 4.1.2 使用C++ Interop调用非托管函数 213 4.2 托管代码使用非托管C++类 217 4.3 在非托管代码中使用托管对象 222 4.4 混合编译托管和非托管代码 228 4.4.1 同一项目中的代码混合 228 4.4.2 同一源文件中的代码混合 230 4.5 C++ Interop中的封送处理 232 4.5.1 封送字符串 233 4.5.2 封送数组 236 4.5.3 封送结构体 237 4.5.4 封送回调函数和委托 239 4.6 C++ Interop的错误处理 242 4.6.1 通过托管C++封送非托管代码抛出的异常 243 4.6.2 在编译时检查类型特性 249第三部分 COM Interop 第5章 在.NET中使用COM组件 251 5.1 早期绑定COM对象 252 5.1.1 为COM类型库生成互操作程序集 252 5.1.2 通过互操作程序集早期绑定COM对象 257 5.1.3 创建自定义互操作程序集 260 5.2 后期绑定COM对象 262 5.3 通过与非托管代码互操作创建COM对象 266 5.3.1 通过P/Invoke创建COM对象 266 5.3.2 使用C++ Interop包装COM对象 269 5.4 封送处理 272 5.4.1 封送常用数据类型 272 5.4.2 封送VARIANT数据类型 277 5.4.3 封送数组 282 5.4.4 封送COM集合 286 5.4.5 封送自定义数据结构 290 5.4.6 处理COM事件 292 5.5 错误处理 297 5.5.1 映射COM方法返回值HRESULT到托管代码 297 5.5.2 使用IErrorInfo接口提供扩展的错误信息 305 5.6 提升性能 309 5.6.1 细粒度接口和粗粒度接口 310 5.6.2 优化封送处理性能 311 5.6.3 避免使用后期绑定 311 5.6.4 使用ReleaseComObject释放COM对象 312 5.6.5 避免跨单元调用 314 5.7 共享互操作程序集 317 第6章 在COM中使用.NET程序集 319 6.1 使用ClassInterface暴露.NET类 320 6.1.1 使用AutoDual实现早期绑定 321 6.1.2 使用AutoDispatch实现后期绑定 324 6.2 使用接口暴露.NET类 327 6.3 使用属性调整类型库元数据 332 6.3.1 控制COM标识 332 6.3.2 控制COM可见性 334 6.4 封送处理 336 6.4.1 封送常用数据类型 336 6.4.2 封送字符串 349 6.4.3 封送数组 355 6.4.4 封送自定义数据结构 362 6.4.5 封送集合 367 6.4.6 封送VARIANT数据类型 372 6.4.7 传递可选参数 386 6.4.8 暴露托管事件 392 6.5 .NET异常处理 397 6.5.1 将异常转化为HRESULT 397 6.5.2 提供表示成功的HRESULT返回值 401 6.6 为COM Interop准备程序集 403附录A 光盘内容介绍 407 A.1 源代码和可执行程序 407 A.2 工具软件 407 A.3 资源 409附录B 有关互操作技术的互联网资源 411 B.1 Interop 411 B.2 P/Invoke 411 B.3 C++ Interop 412 B.4 COM Interop 413 B.5 封送处理 413附录C 本书所用术语表 415
关键词:精通 NET 操作