组件与.NET互操作
组件
1、何谓组件技术?
组件技术就是利用某种编程手段,将一些人们所关心的,但又不便于让最终用户去直接操作的细节进行了封装,同时对各种业务逻辑规则进行了实现,用于处理用户的内部操作细节,甚至于将安全机制和事物机制体现的淋漓尽止。而这个封装体就常常的被我们称作组件。
2、组件有什么作用?
这个问题似乎有些笼统,试着想一想windwos何以实现如此强大的生产力?而在它的背后到底有什么在服务着?
一句话:组件就是windows的灵魂,脱离了组件,windows系统将不再如今天一样如日冲天,windows如此,Unix也同样是如此,作为一个操作系统,它所完成的功能无不体现着组件的服务,一个很轻松的Copy– Paster都要靠DDE来支持,而DDE就是一种组件服务对象,而具体到某一个细节,
组件有其自身的规则实现,而规则的实现又体现了接口的实现,但是组件对象本身也是一个组件,它也有业务逻辑规则需要处理,它也要起到所集合的组件的协调。如此一来,可以能过某一个组件对象来协调的实现一些、一部分的业务逻辑规则!而对于应用者来说,这一切完全没有必要去得知,甚至是没有意义的。
、为什么要应用组件技术?
使用组件技术的的目的是实现各种规则的实现,而且组件对象还将从更广阔的方面来考虑,它能将一个大型的分布式系统进行统一的规划、合理的处理冗余、安全、平衡负载……等单纯的编程手段不能实现的功能,这就是我们要应用组件的一个很重要的原因。再者,组件对象不是普通的可执行文件,更不是将各种规则定死在其内部,它可以很平滑的实现自身的升级、扩展。
组件(component)技术是各种软件重用方法中最重要的一种方法,也是分布式计算和Web服务的基础。网络应用中的软件组件,又被称为中间件(middleware)。
组件技术的应用现在已经十分广泛,从Windows编程中使用的各种控件和公用对话框,到ActiveX控件和DirectX的应用;从微软公司的COM,到Sun公司的JavaBean。其中最流行的组件技术的应用是——客户端的VBX(微软/VB)和服务器端的EJB(Sun/Java)。
在网络及其应用都很发达的今天,对组件服务的需求十分强烈,因此组件技术近年来得到了飞速的发展和广泛的应用。
概述
面向过程的编程重用函数、面向对象的编程重用类、范型编程重用的是算法的源代码,而组件编程则重用特定功能完整的程序模块。
每个组件会提供一些标准且简单的应用接口,允许使用者设置和调整参数和属性。用户可以将不同来源的多个组件有机地结合在一起,快速构成一个符合实际需要(而且价格相对低廉)的复杂(大型)应用程序。
组件区别于一般软件的主要特点,是其重用性(公用/通用)、可定制性(设置参数和属性)、自包容性(模块相对独立,功能相对完整)和互操作性(多个组件可协同工作)。可以简单方便地利用可视化工具来实现组件的集成,也是组件技术一个重要优点。
组件在某些方面类似于“可执行程序”,在另一些方面又类似于“库”。
组件标准
组件应用的基础是标准,没有统一的接口描述、没有规范的组件通信、没有标准的对象请求和远程调用,就没有组件应用的可能。目前的主要标准有CORBA(国际通用)、EJB(Sun的Java)、COM和CLR(Microsoft的Windows和.NET)。
这里主要说一下COM和CLR
3.COM / .CLR
年提出的一种组件技术,是软件对象组件之间相互通信的一种方式和规范,它是一种平台无关、语言中立、位置透明、支持网络的中间件技术。
COM是OLE(ObjectLinking and Embedding对象链接和嵌入)的发展(而OLE又是DLL
[Dynamic LinkLibraries动态链接库]的发展),DCOM(Distributed
COM年)则是COM的发展。ActiveX控件是COM的具体应用(如VBX和DirectX都是基于ActiveX的)。ATL(Active
Template Library活动模板库)是开发COM的主要工具,也可以用MFC来直接开发COM,但是非常复杂。
年推出了.NET框架,其中的核心技术就是用来代替COM组件功能的CLR(Common
Language Runtime公共语言运行库),可采用各种编程语言,利用托管代码来访问(例如C#、VB、MC++),使用的是.NET的框架类库FCL(FrameworkClass
Library)
微软公司的各种组件技术之间的关系与发展可以参见下图:
下面分别对这几种组件技术加以简单的介绍:
)DLL
DLL(Dynamic Link Libraries动态链接库)还不能算组件技术,但它是软件重用的鼻祖。
DLL采用动态链接,对公用的库函数,系统只有一个拷贝(位于系统目录的*.DLL文件),而且只有在应用程序真正调用时,才加载到内存。在内存中的库函数,也只有一个拷贝,可供所有运行的程序调用。当再也没有程序需要调用它时,系统会自动将其卸载,并释放其所占用的内存空间。
由于应用程序是通过系统来调用动态链接库的,因此每个DLL都有一个类似于main的入口函数。在DLL中,供外部应用程序调用的库函数叫做导出函数,而只是被DLL内部调用的库函数则叫做内部函数。导出函数在客户端叫做导入函数。
2)OLE
OLE(Object Linking and Embedding对象链接和嵌入)是微软公司于1991年推出的一种简单的组件技术,它允许Windows中的程序相互之间进行合作——一个(客户)程序调用另一个(服务器)程序,以完成特定的功能。而且客户/主程序的界面不变,就似将服务器程序嵌入到客户程序中一样。
)COM
OLE 1.0实际上只是一种复合文档,而OLE 2.0已经具有标准组件的特性了,显然它是受了CORBA的影响。所以从OLE 1.0到OLE 2.0,是微软公司在组件技术上的一次飞跃。这时,OLE的名称就有一些名不副实了,因此,在增加了一些功能和规范之后,微软公司于1993年在OLE 2.0的基础上又推出了COM,用来替代原有的OLE。这样一来,OLE就不再是一种独立的组件技术,而只是COM技术在链接和嵌入方面的一个具体应用。而1996年3月推出的ActiveX控件,也只是COM的一个具体应用,它是用来替代原有的VBX控件的。
COM(Component Object Model组件对象模型)的核心是一组组件对象间交互的规范,它定义了组件对象如何与其使用者通过二进制接口标准进行交互,COM的接口是组件的球类型纽带。
除了规范之外,COM还是一个称为COM库的实现,它包括若干API函数,用于COM程序的创建。
)DCOM
DCOM(Distributed COM,分布式COM)是COM的网络化。COM具有进程透明性,组件对象和客户代码不必考虑调用传递的细节,只须按照普通函数方式进行调用即可。而DCOM将COM的进程透明性扩展为位置透明性,形成分布式的组件对象模型。
)COM+
COM+是COM-based services and technologies(基于COM的服务与技术)的简称,+表示将COM组件技术和MTS(Microsoft
Transaction Server年随Windows
2000推出的。
).NET / CLR
.NET的核心是CLR,它可以视为是COM技术的继承和发展,它解决了COM组件模型中存在的主要问题。
COM向CLR过渡
鉴于COM技术已经被使用多年,有许多现存的资源,程序员和用户也不可能一下子就全部完全转换到.NET环境。因此,微软公司也允许在CLR环境中继续使用COM/DCOM/
COM+和DNA,这可以通过.NET框架的System.EnterpriseServices命名空间来进行。
但是鉴于与COM相比,CLR组件所具有的无比优越性。COM技术必然会走向灭亡,而.NET的CLR终将取而代之。
整理自:组件技术介绍
.net互操作
相对于COM技术,.NET技术就是为基于组件的程序设计而生的,所以其编码效率和语言可读性要高出COM一个等级。但是由于1993年以后的十多年时间里,人们利用基于COM的组件程序设计技术开发了大量的高复杂度,高可用性的代码,并且他们运行良好,效率极高,如果用.NET技术重写这些代码简直就是得不偿失,加之在.NET的实现过程中并不是所有的Windows
API都被重写,有些功能是.NET所不能完成的。面对这样的问题, .NET互操作技术应运而生,可见需求才是技术的原动力。
.NET互操作性入门系列(一):.NET平台下互操作性介绍
.NET互操作性入门系列(二):使用平台调用调用Win32函数
.NET互操作性入门系列(四):在C#中调用COM组件
托管代码与非托管代码
.NET Framework的高级语言编写的代码,它们包括:C#,
J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的语言共享统一的类库集合,并能被编码成为中间语言(IL)。运行库编译器(runtime-aware
compiler)在托管执行环境下编译中间语言(IL)使之成为本地可执行的代码,并使用数组边界和索引检查,异常处理,垃圾回收等手段确保类型的安全。
组件与.NET互操作的更多相关文章
- net组件转化成COM组件
第一步:生成秘钥文件 强名称工具 (Sn.exe) 有助于使用强名称对程序集进行签名.Sn.exe 提供了用于密钥管理.签名生成和签名验证的选项. 1.使用Visual Studio 命令 Visua ...
- C#互操作
一.引言 “为什么我们需要掌握互操作技术的呢?” 对于这个问题的解释就是——掌握了.NET平台下的互操作性技术可以帮助我们在.NET中调用非托管的dll和COM组件. ..NET 平台下提供了3种互操 ...
- [转]C# 互操作性入门系列(四):在C# 中调用COM组件
传送门 C#互操作系列文章: C# 互操作性入门系列(一):C#中互操作性介绍 C# 互操作性入门系列(二):使用平台调用调用Win32 函数 C# 互操作性入门系列(三):平台调用中的数据封送处理 ...
- 几种ESB(企业服务总线)介绍
ESB(Enterprise Service Bus,即企业服务总线)是传统中间件技术与XML.Web服务等技术结合的产物.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素. 企业服务 ...
- 让C# Excel导入导出,支持不同版本的Office
问题:最近在项目中遇到,不同客户机安装不同Office版本,在导出Excel时,发生错误. 找不到Excel Com组件,错误信息如下. 未能加载文件或程序集“Microsoft.Office.Int ...
- 横向技术分析C#、C++和Java优劣
转自横向技术分析C#.C++和Java优劣 C#诞生之日起,关于C#与Java之间的论战便此起彼伏,至今不辍.抛却Microsoft与Sun之间的恩怨与口角,客观地从技术上讲,C#与Java都是对传统 ...
- CORBA简介
使用.NET开发corba应用 一. 什么是IIOP.NET IIOP.NET 是通过使用基于corba的IIOP支持.NET.javaEE和corba组件实现无缝互操作的技术.如图1.1所示,这种解 ...
- 让C# Excel导入导出,支持不同版本的Office(转)
问题:最近在项目中遇到,不同客户机安装不同Office版本,在导出Excel时,发生错误. 找不到Excel Com组件,错误信息如下. 未能加载文件或程序集“Microsoft.Office.Int ...
- Kinect 开发 —— 语音识别(上)
Kinect的麦克风阵列在Kinect设备的下方.这一阵列由4个独立的水平分布在Kinect下方的麦克风组成.虽然每一个麦克风都捕获相同的音频信号,但是组成阵列可以探测到声音的来源方向.使得能够用来识 ...
随机推荐
- QString类
1.将QString所有字母大写 QString.toUpper() 2.将QString所有字母小写 QString.toLower() 3.获取字符串的字符数 QString.length() 4 ...
- 最简单的CI框架入门示例--数据库取数据
前提: 安装好MySQL,Apache,PHP. 1.下载CI框架 下载地址 http://www.codeigniter.com/ 2.配置 database.php配置: 为数据库服务器设 ...
- IDEA 修改JSP和后端数据后,页面刷新可以实时更新
情况:刚开始使用IDEA进行开发时,发现修改JSP页面或者后端数据后,再刷新浏览器页面,发现没有变化,页面无更新. 这样就导致不得不频繁重启tomcat服务器.非常麻烦 解决方法: 步骤1. 先设置t ...
- GridView右键菜单
一.添加右键菜单 1.在VS工具箱中的“菜单和工具栏”找到ContextMenuStrip控件,双击添加. 2.点击ContextMenuStrip右上方的小三角形,打开编辑项,可以添加菜单项.至于菜 ...
- LeetCode第[66]题(Java):Plus One
题目:数组加一 难度:Easy 题目内容: Given a non-empty array of digits representing a non-negative integer, plus ...
- java中的Properties
Properties类继承自HashTable类并实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地方,就是它的键和值都是字符串类型. Properties中的 ...
- web项目在iis配置好后不能正确访问问题集锦,以及IIS常规设置
6.IIS配置好,项目无法访问,注意项目对应的应用程序池的net版本是否正确,是否集成(一般都是集成,很少是经典) 本项目用的4.0,可IIS默认程序池为2.0,将2.0改为4.0就行. 7.HT ...
- fiddler之使用教程(一)
一. 什么是fiddler&它可以做什么 fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一.它能够记录客户端和服务器之间的所有HTTP请求,可以针对特定 ...
- VMware 虚拟镜像转 Hyper-V(Win10/2016)
VMware 虚拟镜像转 Hyper-V(Win10/2016) 参考:http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyp ...
- RegularExpressions(正则表达式)
最近在不少地方用到了正则表达式,一直对这一块不太熟悉,今天写一些关于正则表达式的知识,一来是总结自己学的知识,二来今后忘记了可以及时的复习. 在java中想应用正则表达式带来的好处,必须先了解两个类, ...