《精通。NET互操作P/Invoke,C++Interop和COMInterop》介绍Windows平台上的託管代码与非託管代码之间进行互操作的各种技术,包括由。NET提供的各种互操作方法、属性以及各种工具的用法及其工作原理。精通。NET包括3部分,平台调用——主要用于解决在託管代码中调用非託管程式设计语言编写的flatAPI(如Win32API、C/C++风格的API等)的问题;C++Interop——技术专门用于解决託管代码与C++编写的非託管代码之间的互操作问题;COMInterop——介绍了使用COMInterop解决在託管代码中调用COM组件,以及在COM中调用託管类型的问题。
基本介绍
- 书名:精通。NET互操作
- 作者:黄际洲 (作者), 崔晓源 (作者)
- ISBN:9787115204349
- 类别:图书 > 计算机与网际网路 > .net
- 页数:417页
- 定价:68.00 元
- 出版社:人民邮电出版社
- 出版时间:2009
- 装帧:平装
- 开本:16
内容简介
《精通.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
……