.NET简谈互操作(一:开篇介绍)

互操作系列文章:

  1. .NET简谈互操作(一:开篇介绍)

  2. .NET简谈互操作(二:先睹为快)

  3. .NET简谈互操作(三:基础知识之DllImport特性)

  4. .NET简谈互操作(四:基础知识之释放非托管内存)

  5. .NET简谈互操作(五:基础知识之Dynamic平台调用)

  6. .NET简谈互操作(六:基础知识之提升平台调用性能)

  7. .NET简谈互操作(七:数据封送之介绍)

本人最近在学习非托管C++互操作的技术,有点小收获不敢私藏拿出来跟大家分享;作为.NET开发人员,我们有必要学习一些互操作方面的知识;尤其对一些高级程序员来说,掌握非托管的互操作能很好的增加我们的技术竞争力;由于互操作的内容很多,我打算用系列来讲,这篇就当是随便唠叨做入门介绍吧;

.NET平台的相关基础知识我就不浪费时间讲了,直接进入主题吧;.NET是在操作系统上的一层软件开发框架,是在Windows平台上的抽象封装,将复杂的软件开发过程简单化,让我们摆脱复杂重复的技术难点进行高效的应用系统开发;但是在工作过程中我们经常会遇到一些调用Win32的相关操作,比如跟用户界面相关的接口调用User32.dll框架,一些内核处理Kernel.dll框架,这些都是平台提供给我们的接口;要想软件在计算机上运行起来,不管多少层封装、多少层抽象最终还是要将我们编写的代码转换成机器码才能成功运行软件,只是减轻了我们程序员的工作量;[王清培版权所有,转载请给出署名]

1:

由于.NET应用程序是托管的,运行在受限的CLR环境中,所有的内存分配回收等等都是CLR负责管理;这样既有好处也有坏处,我们无法用程序来为所欲为,只能用.NET提供给我们的功能来编写,在没有P/Invoke(平台调用)的情况下,我们能做的事情真的很好,微软也考虑到如果.NET不提供对过去的Windows平台上技术的支持,必然将大大妨碍.NET技术的发展,对于一些成熟的技术如:COM(组件对象模型)、OLE(复合文档)、用户界面(User32)、内存管理(Kernel)等等都提供了很好的支持,而且相当简单,我们能很方便的进行调用非托管技术;[王清培版权所有,转载请给出署名]

要想很好的利用P/Invoke(平台调用)进行互操作,我们不单单要懂.NET平台的相关技术,我们也需要对非托管的技术有个简单的了解,比如C++中的变量的内存占用和非托管的内存占用大小区别、C++中的字符编码与.NET中的字符编码区别;任何两种不同技术之间的区别不仅仅是我们表面看上去的那些东西,更重要的在于它的运行与内存分配;在我们学习平台调用的时候,我们需要花上一点时间去学习一些非托管技术,比如COM的内存分配方法CoTaskMemAlloc,C++的内存分配NEW,C的内存分配malloc,这些分配方法的不同导致托管的封送拆收器的处理不同;进行互操作的时候,更多需要考虑的是两者之间的等价处理,如变量的内存大小布局是否一致;在托管中调用非托管代码返回一个指针类型,我们用IntPtr接受,然后用MarShal封送拆收器的帮助类,来进行对象转换;我讲的这些只是互操作中的冰山一角,当我们能熟练进行平台调用的时候我们所开发的软件类型将大大增加,不单单是Winform和asp.net之类的,我们也可以用.NET来开发一些大型的网络系统,更重要的是我们可以用.NET来开发一些部分.NET程序员望而却步的软件,同样是.NET程序员,这样一来我们就比同行多了一些筹码;

总结:这篇主要是简单介绍互操作要涉及的知识面,可能我这短短的几句话很难说清楚互操作的一些技术问题,不要急,请继续关注本人,下面我们将具体介绍互操作中的实质性的技术操作;

时间: 2024-10-23 00:35:27

.NET简谈互操作(一:开篇介绍)的相关文章

.NET简谈互操作(七:数据封送之介绍)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习.互操作的基础知识已经差不多完了,当然一篇小小的文章很难全面的讲述互操作的方方面面,本人只是总结出关键的地

.NET简谈互操作(五:基础知识之Dynamic平台调用)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习.在上篇文章中我们学习了关于托管与非托管内存Dispose(释放)问题:下面我们继续学习基础知识中的Dyn

.NET简谈互操作(二:先睹为快)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之释放非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习,为了揭开互操作的神秘面纱,今天这篇文章我们就来先睹为快,让我们先来做个例子,基础的东西,我们陆续进行讲解:由于互操

.NET简谈互操作(六:基础知识之提升平台调用性能)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习.本篇文章我们将来学习互操作基础知识中的最后一个知识点"提升平台调用的性能": 在于非托管函数进

.NET简谈互操作(三:基础知识之DllImport特性)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之释放非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用) .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习,上一篇文章中我们介绍了托管代码怎么与非托管代码C++之间的互操作:要想在托管代码中成功的进行非托管调用,要注意的细

.NET简谈互操作(四:基础知识之Dispose非托管内存)

互操作系列文章: .NET简谈互操作(一:开篇介绍) .NET简谈互操作(二:先睹为快) .NET简谈互操作(三:基础知识之DllImport特性) .NET简谈互操作(四:基础知识之Dispose非托管内存) .NET简谈互操作(五:基础知识之Dynamic平台调用)  .NET简谈互操作(六:基础知识之提升平台调用性能) .NET简谈互操作(七:数据封送之介绍) 我们继续.NET互操作学习.前一篇文章中我们学习了基础知识中的DllImport关键特性:我们继续学习基础知识中的内存释放相关技术

.NET简谈组件程序设计之(初识远程调用)

在.NET1.0版本出来的时候,要想进行远程调用基本上都是通过WebService的方式.而随着.NET2.0版本的出现,我们可以通过一个更加方便且高扩展性的框架来进行编写远程调用的程序,也就是我们都比较熟悉的.NetRemoting. 网上对.NetRemoting技术讲解的文章不计其数,但是很少有一本比较全面的.系统的学习书籍.我们都是从哪些零散的知识里慢慢摸索,效果不太理想. 今天我也来简单的介绍一下我理解的Remoting.不仔细研究一下还真不知道它的厉害,完全的托管平台.高扩展性.灵活

.NET简谈面向接口编程

过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式:我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广:面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算是给初学者提个醒吧. 1: 2: 我们将计算机系统抽象层三个层次,我们做应用层

一起谈.NET技术,.NET简谈面向接口编程

过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式:我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广:面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算是给初学者提个醒吧. 1: 2:  我们将计算机系统抽象层三个层次,我们做应