本人最近在学习非托管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程序员,这样一来我们就比同行多了一些筹码;
总结:这篇主要是简单介绍互操作要涉及的知识面,可能我这短短的几句话很难说清楚互操作的一些技术问题,不要急,请继续关注本人,下面我们将具体介绍互操作中的实质性的技术操作;
分享到:
相关推荐
欧柏泰克:.NET 简谈面向接口编程 面向接口编程是一种高抽象的开发模式,旨在将类与类之间的关系提升到一个更高的抽象层次。这种编程方式可以帮助开发人员更好地设计和实现软件系统,从而提高开发效率和质量。 在...
事务处理是现代软件开发中不可或缺的一部分,尤其是在处理数据库操作或需要确保一系列操作原子性的场景下。.NET框架提供了强大的事务支持,允许开发者轻松地在不同的环境中实现事务管理。本文将详细介绍.NET中的事务...
前段时间一直在学习和研究.NET事务处理,慢慢的我发现可以使用事务处理来实现一种可逆的系统框架。这种框架在一些IT社区似乎还没有见过,但是在我们日常开发中确实有这个需求。所以我花了点时间深入的研究了一下事务...
简谈英文自我介绍精选.doc
简谈计算机应用基础教学 简谈计算机应用基础教学 任务驱动教学法是一种建立在建构主义学习理论基础上的教学法,怎样分析计算 机应用基础教学? 一、引言 从事中职计算机教学多年来,发现了一个非常普遍的现象,即使...
### 简谈JDK动态代理 #### 一、引言 JDK动态代理机制是Java反射机制的一个重要应用,它允许程序在运行时创建一个实现了特定接口的新类实例,并且能够控制这些新类实例的方法调用行为。这种机制不仅提高了代码的灵活...
【标题】:简谈三菱PLC编程软件 【描述】:本文主要探讨了三菱可编程逻辑控制器(PLC)的编程软件,包括不同系列的软件特点及其在编程、监控、调试和维护中的应用。 【标签】:互联网 cs 【正文】: 三菱PLC编程...
### 应用笔记LAT1239:简谈BlueNRG-LP和-LPS的代码空间优化 #### 1. 引言 随着物联网技术的发展,越来越多的智能设备需要通过空中下载技术(Over-the-Air, OTA)进行远程升级与维护。然而,在使用BlueNRG-LP/LPS...
简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术 简谈Windows下的反调试技术
【标题】:简谈三菱PLC编程软件概要 【描述】:本文旨在概述三菱PLC编程软件的主要特点和用途,适用于不同的三菱可程序设计控制器系列。 【标签】:互联网,cs 【正文】: 三菱PLC编程软件是工业自动化领域广泛...
"班级管理方法简谈" 班级管理是学校教育中的一项重要工作,直接关系到学生的学习和成长。在《班级管理方法简谈》中,作者卢海战提出了五点班级管理方法,旨在提高班级管理的效率和质量。 首先,作者强调了加强学生...
本文将详细介绍如何通过简单的步骤DIY一个基于Ubuntu的定制发行版,帮助用户在节省时间的同时满足个性化需求。 #### 2. DIY Ubuntu发行版的前提与准备工作 - **基础知识**:了解Linux基本命令、文件系统类型等。 - ...
简谈工程项目成本管理.doc
简谈公司员工绩效承诺.doc
房地产开发流程简谈.pptx