ASP.NET网站制作之.NET组件和COM组件之间的互相操纵仓酷云
我之所以想学。NET,是因为一直觉的BILLGATES好厉害,希望有一天能去微软,虽然现在还距离遥远,呵呵:).NET手艺是微软鼎力推行的下一代平台手艺,自从.NET手艺架构Beta2版本的正式公布,此项手艺也渐渐走向成熟和不乱。依照微软的平台体系占据率,我们不难设想失掉,在将来的一两年内.NET手艺一定会势不可当一样平常的登上支流的手艺平台,而一个新的手艺平台得以疾速开展的最主要的条件是:他不会完全的摒弃之前的手艺,这一点关于.NET手艺来讲指的就是COM/COM+手艺了。一样平常来讲,在IT手艺界和硬件家产,手艺的更新换代速率十分得惊人,而常规是一切的新手艺城市遵守向下兼容的准绳,可是.NET手艺不单单做到了这一点,.NET乃至完成了互相之间的各自挪用,这一点长短常不足为奇的。也就是说,不仅我们能够在.NET组件中挪用COM组件,同时也能够在COM组件中一般的挪用.NET组件。这点带来的优点是不言而喻的,一方面我们能够坚持现有的手艺资本,另外一方面,在现有资本中能够使用.NET所带来的各类新手艺。
在入手下手之前我们先来看一下.NET组件和我们今朝常利用的COM组件之间有何分歧的地方吧。
1、.NET组件能够分为两年夜类:共享的.NET组件和公有的.NET组件。
1.共享的.NET组件必要经由过程尺度公然关头字暗码手艺来包管本身的独一性,在这一点下面对照相似于COM的环球独一ID号码GUID。可是,我们在大概的情形下应该只管制止利用共享的.NET组件,由于如许将会有大概再一次的堕入今朝在视窗体系下临时困扰开辟职员的“DLL天堂”。
2.公有的.NET组件是我们将会常常利用的.NET组件体例,在这类体例之下,我们公布.NET组件必要做的只是复杂的举行拷贝操纵就能够了,似乎回到了太古的DOS时期了,在也不用体贴纷纷庞大的体系注册表了,也不用忧虑DLL的版本被掩盖等等的成绩了。
3.感悟:COM组件是微软已经力推了良多年的一种代码复用的手艺框架,在这些年里也失掉了极年夜的开展和使用,但它的坏处却也日趋分明,我们不能不面临浩瀚的COM组件之间的版本把持和使人可怕的DLL天堂,另有注册表、GUID等等。在我们安装一个软件的同时,也带来了大批的我们所未知的版本单一的COM组件到我们的操纵体系中。可是,COM组件的手艺上风也是分明的,在很年夜的水平上完成了Windows平台下的代码复用,以是我们才会提出如许的一个话题,怎样才干在.NET手艺日臻成熟的情形下,回护和使用已存在的大批的接纳COM手艺的软件和产物呢?
2、上面我们就切磋一下,怎样完成.NET组件和COM组件之间的相会挪用和操纵。
1.起首,我们来看看在现有的COM组件中怎样挪用.NET编写的组件吧:
在这里我们利用C#编写一个最复杂的组件,仅仅完成前往一个字符串,具体的代码以下:在下面的.NET组件傍边我们完成了一个类成员:say。他的用处是复杂的前往一段字符串。
切换到MS-DOS命令行上面,运转:
C:>csc/t:library/outClassLibrary1.DLLClassLibrary1.cs
下面的编译器参数/t:library告知C#编译器我们如今是在创建一个库使用程序。如许,我们就失掉了一个称号为ClassLibrary1.DLL的.NET组件了。可是想要在现有的COM组件中利用这个组件,我们另有举行以下步骤:
切换到MS-DOS命令行上面,运转:
C:>regasmoutClassLibrary1.DLL/regfile:ClassLibrary1.reg
下面的命令行是注册我们的.NET组件,而且发生了一个备用的注册表文件。人人必定会记得在之前我们的win9x/NT/2000上面注册COM组件利用的命令是:regsvr32c:test.dll
在.NET上面,注册.NET组件就必要下面的regasm命令了,值得注重的是,这个办法仅仅是为了可供COM组件来挪用,.NET自己之间互相挪用组件是不必要任何注册的!还没有停止呢,接上去我们必要:
切换到MS-DOS命令行上面,运转:
C:>tlbExpClassLibrary1.dll/out:ClassLibrary1.tlb
下面的命令行暗示将会发生一个.NET组件的范例库,目标是为了我们在COM组件中举行提早绑定操纵。好了,接上去我们就能够在本人的基于今朝COM手艺的代码中便利的利用下面我们利用C#编写的.NET组件了。在这里,我们利用VB6.0编写一个小小的测试代码,在入手下手之前我们必要在VB的集成情况中利用菜单中的“援用”选项,选择我们方才发生的范例库文件ClassLibrary1.tlb。
VB测试的代码以下:
PrivateSubForm_Load()
DimtestAsNewClassLibrary1.hello
DimstrAsString
str=test.say("dddd")
MsgBoxstr
EndSub
2.接上去,我们就来看看,怎样在.NET组件中利用今朝存在的COM组件吧。
关于.NET来说,利用COM组件要想对复杂一些。.NET在计划之初就思索到了怎样便利的使用现有的各类手艺资本,这也是微软的一向风格,.NET的壮大的地方也可见一斑。.NET供应了大批的类库来便利的完成同COM的互相操纵,个中很主要的一个称号空间就是:System.Runtime.InteropServices。经由过程这个称号空间的名字我们也能够从字面上看出,“互操纵服务”。System.Runtime.InteropServices这个称号空间供应了一系列的类来对COM对象举行操纵。
上面的例子中,我们来挪用一下体系自带的Win32函数MessageBoxA,这个函数位于体系的COM组件user32.dll傍边,我们挪用的代码以下:
usingSystem;
usingSystem.Runtime.InteropServices;
classTest
{
publicstaticexternintMessageBoxA(inthWnd,stringstrMsg,stringstrCaption,intnType);
publicstaticvoidMain()
{
intmyMsg;
myMsg=MessageBoxA(0,"Hello!","test",0);
}
}
切换到MS-DOS命令行上面,运转:
C:>cscTest.cs
编译终了我们的C#使用程序以后,间接运转就能够看到对话框了!
必要注重的是,在挪用COM组件之前,我们必要在.NET程序中援用称号空间:System.Runtime.InteropServices。由于我们必要利用这个称号空间所供应的一个办法:DllImport。怎样,在.NET中利用COM组件长短常的便利的吧。下面是我们挪用的体系自己自带的DLL组件,一样的,也能够利用这类办法来挪用我们本人利用VB/VC编写的COM组件。
3、总结:好了,我们已切磋完了怎样在.NET和COM之间互相操纵了,我们也很明显的看到了.NET手艺的壮大,如今越早把握.NET手艺就会在将来越简单的占据抢先的地位,让我们通力合作把握壮大的.NET平台手艺吧。你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:) 由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。 ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案. 众所周知,Windows以易用而出名,也因此占据不少的服务器市场。 ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。 业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高,你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。 关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。 逐步缩小出错代码段的范围,最终确定错误代码的位置。 碰到复杂点的问题都不知道能不能解决,现在有点实力的公司都选择自已在开源的基础上做开发。但没听说过有人在IIS上做改进的,windows、sqlserver集群方面的应用也很少见。 虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。 平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。 在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的 有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。 使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。 可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
页:
[1]