|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我之所以想学。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
{
[DllImport("user32.dll")]
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怎么样,我懂的少,问的可能很幼稚,见笑了啊:) |
|