精通.NET互操作

出版时间:2009-5  出版社:人民邮电出版社  作者:黄际洲,崔晓源  页数:419  
Tag标签:无  

前言

自从2000年微软公司.NET平台问世以来,全球已经有超过400万开发人员使用.NET平台进行软件开发。对于.NET来说,这无疑是一个巨大的成功。这不仅仅体现在商业上的成功,其核心价值在于.NET为基于微软Windows平台的软件开发过程提供了一种新颖、高效的编程模型。在该模型下,开发人员能够更容易地将精力集中在其特定的开发情景中,而不用过多地关注消息循环、窗口过程等操作系统底层的处理。目前,基于-NET平台的技术和开发环境正处于飞速发展的时期。在本书即将出版之际,微软公司已经正式发布了NET Framework 4.O所支持的新特性以及预览版。另一方面,由于历史的原因,在.NET出现之前,开发人员已经编写了大量经过严格测试且可复用的非托管代码。它们以C库函数、C++类库以及COM组件的形式存在于诸多应用程序和框架之中,并承担着非常重要的角色。但由于在托管和非托管对象模型之间,数据类型、方法签名和错误处理机制都存在很大差异,从而使两种编程模型之间的代码互用和移植更加复杂。因此,在很长一段时期内,开发人员必须面对.NET与久经考验的“遗留代码(1egacy code)”长期并存的局面。当然,开发人员可以选择.NET平台,使用托管代码重写这些已有的非托管代码。但这个重写的过程势必会枯燥无味,而且项目经理也不会在项目进度中安排大量的时间以进行重写代码的工作。更让开发人员感到尴尬的是,很多时候,即使花了很大代价对非托管代码进行了重写,但还是不能保证重写后的托管代码像那些久经考验的非托管代码一样正常或高效地工作。因此在很多情况下,重用已有非托管代码就成了最经济、可行的解决方案。以下是这些情况中的一些典型案例。开发人员所在的部门一直使用第三方提供的COM组件为产品的核心功能提供支持。而新业务要求使用.NET平台。这就出现了一个问题。一方面公司已经为这些COM组件投入了大量的资金,不会轻易放弃这些组件。另一方面开发部门使用.NET平台进行开发,无法直接使用这些COM组件。因此,有效地在.NET平台中重用这些COM组件就成为产品成功的关键要素。

内容概要

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

作者简介

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

书籍目录

第一部分 P/Invoke 第1章 使用C/C++类型的非托管函数   1.1 平台调用简介   1.2 Hello World!示例程序   1.3 获得要调用的非托管函数声明   1.4 平台调用基础知识   1.5 指定调用约定   1.6 指定入口点   1.7 指定字符集   1.8 处理平台调用中的异常或错误    1.8.1 非托管函数的托管定义导致的异常或错误    1.8.2 非托管函数导致的异常或错误   1.9 释放非托管内存    1.9.1 释放由malloc方法分配的非托管内存    1.9.2 释放由new运算符分配的非托管内存   1.10 动态平台调用    1.10.1 平台调用的原理和过程    1.10.2 通过手动加载非托管DLL实现动态平台调用    1.10.3 利用反射实现动态平台调用    1.10.4 利用GetDelegateForFunctionPointer实现动态平台调用    1.11 提升平台调用性能的技巧    1.11.1 显式地指定要调用的非托管函数的名称    1.11.2 对数据封送处理进行优化    1.11.3 尽量避免字符串编码转换  第2章 平台调用中的数据封送   2.1 字符串的封送    2.1.1 封送作为参数的字符串    2.1.2 封送作为返回值的字符串    2.1.3 封送BSTR类型的字符串   2.2 封送作为参数的结构体   2.3 封送从函数体内部返回的结构体    2.3.1 封送作为函数返回值返回的结构体    2.3.2 作为函数参数返回结构体   2.4 封送结构体中的字符串    2.4.1 结构体中的字符指针字段    2.4.2 结构体中的字符数组字段   2.5 控制结构体字段的封送行为   2.6 控制结构体的内存布局    2.6.1 定义结构体的部分字段    2.6.2 联合体的封送   2.7 封送嵌套的结构体    2.7.1 指向结构体指针字段的嵌套形式    2.7.2 结构体实例字段的嵌套形式   2.8 封送类    2.8.1 封送引用类型的简单示例    2.8.2 封送blittable引用类型    2.8.3 将引用类型封送为指向指针的指针   2.9 封送数组    2.9.1 封送简单类型数组    2.9.2 封送字符串数组   2.10 实战演练    2.10.1 背景介绍    2.10.2 模块介绍    2.10.3 实现平台调用  第3章 使用平台调用技术调用Win32 API   3.1 确定要调用的函数   3.2 处理Win32函数返回的错误码   3.3 处理回调函数   3.4 使用Windows定义的常量   3.5 封送Win32数据类型    3.5.1 可直接复制到本机结构中的数据类型    3.5.2 非直接复制到本机结构中的数据类型   3.6 处理句柄   3.7 传递托管对象   3.8 使用P/Invoke调用Win32 API的最佳实践    3.8.1 编码规范    3.8.2 性能    3.8.3 安全性    3.8.4 尽量使用Win32函数对应的.NET托管实现 第二部分 C++ Interop 第4章 C++ Interop 第三部分 COM Interop 第5章 在.NET中使用COM组件  第6章 在COM中使用.NET程序集 附录A 光盘内容介绍 附录B 有关互操作技术的互联网资源 附录C 本书所用术语表 

章节摘录

插图:本节主要讲述了3种优化平台调用性能的方法。(1)将。Dlllmport属性的ExactSpelling字段设置为true,显式地指定要调用的非托管函数的名称,以优化平台调用在非托管DLL中搜索函数的方式。(2)尽可能地使用blittable类型。由于采用blittable类型能够减少平台调用过程中耗费在数据封送处理上的时间,从而能极大地提升平台调用的性能。(3)尽可能避免从LJnieode到ANSI的转换。由于.NET采用的是unicode编码,如果要调用的非托管函数接收的是ANSI字符(串),那么封送拆收器必须先将字符(串)从LJnieode转换为ANSI,再从托管内存中将字符(串)复制到非托管内存中。这样不仅编码转换会牺牲性能,而且复制操作也会耗费时间。除了上面介绍的这3种经过对比测试一一验证了的、优化平台调用性能的方法外,还有其他一些可以优化平台调用性能的方法。比如采用IntPtr作为复杂类型的封送数据类型,或尽可能减少平台调用次数,在非托管代码中尽可能多地完成操作,而只进行获取最终计算结果的平台调用等,这些方法都能够提升平台调用的性能。在实际进行平台调用时,需要对造成性能损耗的原因进行深入分析,只有弄清了造成损耗的原因,才能更有针对性地进行性能优化。

媒体关注与评论

托管代码与非托管代码之间的交互是许多程序员在.NET开发平台上不得不面对的任务。《精通.NET互操作:P/Invoke,C++Interop和COM Interop》这本书深入而透彻地解析了.NET支持的三种与原生代码互操作的技术,作者以自己的经验讲述了原生代码与托管代码之间互操作所涉及到的编程要点,以及背后的一些实现原理。书中提供的实例有助于程序员快速领会并掌握.NET与原生代码互操作技术的用法。我建议在.NFT平台上工作的程序员读一读这本书。 ——潘爱民,著名技术作家,著有《COM原理与应用》等多部畅销书,并翻译了多部经典名作

编辑推荐

《精通.NET互操作P/Invoke,C++Interop和COM Interop》涵盖了:使用P/Invoke调用C库函数及windows API;使用C++Interop与C++类库及核心算法库进行交互;使用COM Interop实现托管代码与COM之间的交互。

图书封面

图书标签Tags

评论、评分、阅读与下载


    精通.NET互操作 PDF格式下载


用户评论 (总计36条)

 
 

  •   利用c++原有代码的好书
  •   了解平台调用,对反射与***+等有一定介绍,很不多的东西,属于基本功的范畴,推荐了
  •   本书全面地介绍了P/INVOKE等****底层技术
  •   还没来得及细看,看了看目录,对我来说足够了。如果只是偶尔用互操作,已经相当不错了。
  •   互操作必备
  •   这本书写的相当的不错,里面很多内容在网上我都没搜到。正是我需要的
  •   经典的东西,但是需要有一定的****基础
  •   商品不错,是正版的。
  •   刚拿到手,翻了几页,几个关注的地方都有相关的内容。

    没有废话,讲得很到位。
  •   看得出来,该书为作者经验之作,是倾注了作者心血的一本值得推荐的好书
  •   好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  •   被托管与非托管的交互问题困扰很久了,终于抓到根救命稻草……
  •   这本书着眼于CLR代码与native代码的交互,并不是原理性书籍,属于进阶级****丛书。深度上适合大多数****开发者的需要。
  •   这书对实际的开发有帮助,可以参考,不错
  •   因为要解决自己用vb做的ocx在****下老是出错的问题,所以买的这本书。也的确有这方面的问题,不过真的很专业,所以我看得很吃力。然后,我只能放下书,用最原始的办法解决了:把ocx从最简单的形式逐步增加功能,直到定位出问题。
  •   刚刚收到这本书,觉得质量还挺好的,大体翻了一下里面的内容挺好的,由浅入深的介绍
  •   这在做一个项目需要C++与C#交互正好管用
  •   比较深奥,如果会vc++ 会好点
  •   使一本好书
  •   应该不是你们的问题,可能是快递没怎么注意.不过你们的速度还是可以的.
  •   书的纸张感觉很粗糙,而且光盘断了!
  •   书没来的及看,光盘是坏的。
  •   前两天买的 只看了第一部分 感觉很不好 当然还是有启蒙作用的 但对于实际应用中解决问题的帮助不大 连结构数组都没怎讲到(我现在遇到的问题就是非托管DLL中封送结构数组,结构里有结构、结构中有联合、要考虑1字节对齐等) 当然 感觉作者应该是有水平的 书中的案例等也写得很详细 但对于这方面的能力应该还不至于专家级别 从心而论 如果为了解决像我那样的类似实际问题 这本书不值得购买 对于开始着手学习这方面的倒是可以好好学习下

    如果以后作者能丰富一些内容 更深入一些 我也许会购买下一作品 对书不对人 见谅
  •   不管是入门还是作为有经验的开发者翻看,都非常适合。
  •   在网上看到了相关的介绍,感觉这本书的知识点和用例比较丰富。学习应用都不错。
  •   书不错,但是发过来的书有点旧
  •   质量真不错 内容具体没看 !
  •   书上是不错,发给我的时候封面很脏,还缺了角……没有时间找他们客户和售后,希望以后不要有类似情况。在这个网站也买了好多书,但很少发评论……
  •   像极二手书,再也不在卓越买书了。封皮像放了20年的样子,还很脏。
  •   内容将的很详细, 也很实用对菜鸟或是大虾同样有用
  •   比较适合我最近研究的方向, 还再看, 没有看完. 配套的还有一些工具软件. 挺好
  •   纸张的质量真泥马坑爹!
  •   虽然我现在只学了c++,C#还不是很了解,托管C++知道一些,但我对托管环境和非托管环境的交互很感兴趣。相信先看了这本书以后再学习C#收获会更大的。
  •   唯一的一本全面描述互操作的书籍,写得挺好,真是不容易!
  •   看来下这本书,写的非常不错,能看出来作者有很深的实践功力,写的很详细也很有条理,里面的例子也很典型...好好学习对提示功力有很大的帮助...超赞的书
  •   以前搞P/Invoke的时候总感觉学习资料分散,无法系统学习。一口气看完前3章,感觉真爽。这本书由浅入深,既适合初学者入门,又能帮助有一定基础的.net开发人员深入理解.net互操作技术的本质。推荐!!
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7