标题：精通.NET互操作
内容简介
《精通.NET互操作P/Invoke,C++Interop和COMInterop》适合所有在开发过程中需要涉及到托管代码与非托管代码进行交互操作的.NET开发人员阅读使用。不论是开始学习.NET编程的开发人员，还是刚刚接触互操作的资深.NET开发人员，都能从《精通.NET互操作P/Invoke,C++Interop和COMInterop》中获益。
作者简介
黄际洲，2004-2007年连续四年微软最有价值专家（MVP）。感兴趣的研究方向主要包括自然语言处理、信息检索、聊天机器人等。他曾翻译了三本游戏编程方面的书籍：《Direct3D中的2D编程》、（游戏编程AllinOne》及《DirectX角色扮演游戏编程》。
崔晓源，就任于微软亚洲研究院创新工程组，负责前沿研究成果的转化和新产品孵化。曾参与过LiveSearch拼写检查模块的研发工作。他最喜欢的项目是在线“电脑对联”第二版。目前他正致力于下一代企业搜索技术和社会网络计算相关的研发工作。
编辑推荐
《精通.NET互操作P/Invoke,C++Interop和COMInterop》涵盖了：
使用P/Invoke调用C库函数及windowsAPI；
使用C++Interop与C++类库及核心算法库进行交互；
使用COMInterop实现托管代码与COM之间的交互。
其实书本就是个工具也可以说是个老师，无论怎么用最后还是自己的时间重要
目录
第一部分P/Invoke
第1章使用C/C++类型的非托管函数1
1.1平台调用简介2
1.2HelloWorld!示例程序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章使用平台调用技术调用Win32API150
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调用Win32API的最佳实践190
3.8.1编码规范190
3.8.2性能192
3.8.3安全性205
3.8.4尽量使用Win32函数对应的.NET托管实现207
第二部分C++Interop
第4章C++Interop210
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.5C++Interop中的封送处理232
4.5.1封送字符串233
4.5.2封送数组236
4.5.3封送结构体237
4.5.4封送回调函数和委托239
4.6C++Interop的错误处理242
4.6.1通过托管C++封送非托管代码抛出的异常243
4.6.2在编译时检查类型特性249
第三部分COMInterop
第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将异常转化为HRESULT397
6.5.2提供表示成功的HRESULT返回值401
6.6为COMInterop准备程序集403
附录A光盘内容介绍407
A.1源代码和可执行程序407
A.2工具软件407
A.3资源409
附录B有关互操作技术的互联网资源411
B.1Interop411
B.2P/Invoke411
B.3C++Interop412
B.4COMInterop413
B.5封送处理413
附录C本书所用术语表415
……