Fork me on GitHub

随笔分类 -  P\Invoke、Interop

摘要:我们继续.NET互操作学习。互操作的基础知识已经差不多完了,当然一篇小小的文章很难全面的讲述互操作的方方面面,本人只是总结出关键的地方好让我们能入个门,在后期如果想要更深入的学习,肯定需要一本详细而全面的书籍才行。想要精通.NET互操作当然也少不了对非托管的技术学习,C++、COM等等,只有既熟悉.NET也熟悉非托管技术才能将互操作融会贯通。从这篇文章起我们将进入到.NET互操作的数据封送阶段,数据封送是.NET/Pinvoke关键的部分,任何托管代码想要和非托管代码互操作,少不了数据的传递返回..... 阅读全文
posted @ 2011-07-05 13:15 王清培 阅读(3326) 评论(2) 推荐(2) 编辑
摘要:我们继续.NET互操作学习。本篇文章我们将来学习互操作基础知识中的最后一个知识点“提升平台调用的性能”; 在于非托管函数进行互操作的过程中,由于涉及的技术因数众多,因此程序的性能会受到这些因素的影响导致性能下降,本篇文章将来介绍在平台调用过程中提升性能的一些设计和编码方面的技巧;[王清培版权所有,转载请给出署名] 一:显示的制定要调用的非托管函数名称 我们在进行平台调用的时候,如果CLR无法在非托管DLL中找到与DllImport特性指定的函数名相同的非托管函数,那么CLR会尝试采用一些规则重新进行搜索。比如我们将sumA非托管函数的CharSet申明为CharSet.Ansi,那么CLR首先会通过根函数名(sum)进行搜索,如果在指定的非托管DLL中找到了此函数,就是用它。如果不能找到,就会使用带后缀A的函数(sumA)进..... 阅读全文
posted @ 2011-07-02 22:38 王清培 阅读(2236) 评论(1) 推荐(2) 编辑
摘要:我们继续.NET互操作学习。在上篇文章中我们学习了关于托管与非托管内存Dispose(释放)问题;下面我们继续学习基础知识中的Dynamic(动态)平台调用技术; 在前几篇文章中,我们都是采用按部就班的方式来调用非托管代码的,先定义非托管代码的托管定义,然后用DllImport来标识相关调用约定;这篇文章我们将介绍怎么通过动态的方式调用非托管代码;在进行讲解之前我们有必要简单的了解一下,托管代码调用非托管代码的大概的步骤或者说是相关细节吧;只有当我们脑子里有一套属于自己的理解思路时,文章才显的有价值;[王清培版权所有,转载请给出署名]...... 阅读全文
posted @ 2011-06-29 17:06 王清培 阅读(2935) 评论(0) 推荐(4) 编辑
摘要:我们继续.NET互操作学习。前一篇文章中我们学习了基础知识中的DllImport关键特性;我们继续学习基础知识中的内存释放相关技术; 在托管与非托管内存之间,是不允许直接调用进行相互操作的,这点我相信稍微有点.NET技术基础的人都能了解;上一篇文章中有位朋友提出了些问题,刚好我们在这里就当是学习来粗略的分析一下,问题大概是这样的:[王清培版权所有,转载请给出署名] 1.在.NET托管平台上的对象与非托管的对象之间是否能直接互换? 2.托管内存与非托管内存是否存在差异?如果存在...... 阅读全文
posted @ 2011-06-29 14:45 王清培 阅读(2923) 评论(5) 推荐(6) 编辑
摘要:我们继续.NET互操作学习,上一篇文章中我们介绍了托管代码怎么与非托管代码C++之间的互操作;要想在托管代码中成功的进行非托管调用,要注意的细节还是很多的,下面我们就来介绍一下,在互操作方面托管代码要注意的必不可少的代码申明,为我们下面的互操作打下基础; 在.NET平台里面开发我们还是很幸运的,微软为我们做了很多很方便的东西,我们只需要了解一下就能快速上手;在互操作里面我们只需要借助DllImport特性就能很好的切入到非托管代码中,微软为我们处理了复杂的内存分配、动态函数查找、地址解析等等本应该我们自己去处理的事情;所谓工欲善其事,必先利其器;选择.NET是正确的;下面我们就来逐一讲解在互....... 阅读全文
posted @ 2011-06-27 15:36 王清培 阅读(3604) 评论(6) 推荐(5) 编辑
摘要:我们继续.NET互操作学习,为了揭开互操作的神秘面纱,今天这篇文章我们就来先睹为快,让我们先来做个例子,基础的东西,我们陆续进行讲解;由于互操作牵扯到的东西非常多,比较复杂,我们要循环渐进的学习,为了给大家有一定的吸引力,让我们一边看一边能动手做起来;本篇文章用VisualStudio2010进行演示,将非托管代码暴露在我们眼前,它对我们来说不在有神秘感,我们通过.NETP/invoke(平台调用)很方便的进行调用,可能需要我们掌握一些C++的基础知识,但是也放心啦,有C语言的基础功,足够用了;我们开始吧..... 阅读全文
posted @ 2011-06-24 12:54 王清培 阅读(3398) 评论(5) 推荐(6) 编辑
摘要:本人最近在学习非托管C++互操作的技术,有点小收获不敢私藏拿出来跟大家分享;作为.NET开发人员,我们有必要学习一些互操作方面的知识;尤其对一些高级程序员来说,掌握非托管的互操作能很好的增加我们的技术竞争力;由于互操作的内容很多,我打算用系列来讲,这篇就当是随便唠叨做入门介绍吧; .NET平台的相关基础知识我就不浪费时间讲了,直接进入主题吧;.NET是在操作系统上的一层软件开发框架,是在Windows平台上的抽象封装,将复杂的软件开发过程简单化,让我们摆脱复杂重复的技术难点进行高效的应用..... 阅读全文
posted @ 2011-06-23 14:43 王清培 阅读(3718) 评论(7) 推荐(4) 编辑

点击右上角即可分享
微信分享提示