透明 发表于 2015-1-16 22:23:50

ASP.NET网页编程之.NET使用技能:非托管COM组件的利用

也许唯一可以让世人留恋Java的理由就剩下它的王牌——跨平台。尽人皆知,asp.net是基于通用言语运转库创立的,也就是所谓的托管实行情况。天生的代码称为托管代码。编译器可以从源代码的形貌中发生元数据信息,而运转库又从元数据中取得托管代码的信息。而我们编写的组件通常为在非托管情况下创立的,这些组件常常不包括元数据信息,那末我们怎样在托管代码中利用这些元数据信息呢?为了在托管情况中利用非托管代码,我们起首必需手工为这些现有的组件发生元数据信息。必需有一种工具可以发生元数据。可以从某个中央取得元数据。这个元数据的起源地就是范例库,现实上,明天一切的组件都有一个范例库。
这里为了申明怎样发生元数据信息,我们无妨以MicrosoftAgent组件为例举行申明。这个组件相似于Office的小助手,它可以完成各类丰厚多彩的人道化的举措,而且撑持语音辨认和语音分解。一样平常的操纵体系都默许安装了这个组件,用户该不会忧愁没有这个组件吧。假如你的体系删除这个组件,你能够到http://microsoft.com/msagent/downloads.htm往下载。上面入手下手先容怎样在asp.net中利用非托管COM组件。
1、起首是创立元数据
MicrosoftAgent控件默许是安装在%systemroot%msagent目次下,起首运转入手下手菜单中VisualStudio.NETCommandPrompt(命令提醒)菜单项。在这个目次实行上面的命令。
tlbimpagentctl.dll/out:agentctl_proxy.dll
经由过程这个命令我们能够创立一个包括元数据信息的代办署理文件agentctl_proxy.dll。注重这并非一个真实的静态毗连库文件,而是一个拆卸文件(Assembly),也就是我们非托管COM组件的代办署理。
也能够经由过程.NET框架供应的有用程序aximp.exe创立,命令行以下,如许它会天生两个文件,以下图所示:注重AgentObjects.dll和agentctl_proxy.dll文件是完整一样的文件。
C:ProgramFilesMicrosoftVisualStudio9.0VC>aximp%systemroot%msagentagentctl.dll
2、安装到asp.net中
把元数据文件安装到asp.net情况中有两种举措:
一是把文件复制到使用程序的BIN目次。
二是把它复制到asp.net目次。
第二种办法有一个缺点,你必需在每个利用组件的asp.net页面拔出一个@Assembly语句。而保留到Bin目次则能够制止这一点。assembly将会被加载到使用程序的一切asp.net页面。因而我们最好仍是把它放在bin目次。
3、IL反汇编(Disassembler)
如今基础上到了令年夜多半VB或VBScript程序员头疼的时分了,我们要使用一个反汇编器发生一些主要信息。
Assembly的称号空间(利用@Import语句)
准确的类名(这大概与ASP有着很年夜的分歧!)
办法和属性的数据范例
办法和属性的准确拼写。注重在C#中Bodytext和BodyText是两个完整分歧的变量。
发生上述信息必要利用IL(IntermediateLanguage)Disassembler两头言语反汇编器,你能够在天生元数据后,键进ildasm.exe启动该工具。然后能够使用FileOpen,选择响应的文件,显现的了局十分相似于OLE/COM检察器取得了局。
注重天生的汇编文件纷歧样,称号空间的称号也纷歧样,在asp.net页面常常必要利用@Import导进称号空间,不外它们的类、属性、办法都是一样的。关于asp.net程序员来讲,全部蓝色的标记都是很主要的,由于它们暗示的是一个类大概是一个接口。假如我们对这些类大概接口举行睁开,我们会取得一系列属性和办法的列表。
我们看到的一切办法都有一个准确的数据范例形貌。起首是办法称号,冒号前面是前往值范例圆括号中是办法必要的参数。
当我们谈及用get_和set_办法形貌属性的时分,VBScript程序员大概会一头雾水,我们晓得每个属性实践上是对应于类中的一个公有成员,属性的读写分离是经由过程这两个函数完成的。
每个属性中间都有一个白色的标志,双击这个属性,我们能够取得属性的界说,我们能够看到属性能够为Get,Set大概Get/Set。
4、组件的利用
当我们对元数据懂得分明今后,剩下的事情就是怎样在asp.net中利用这个组件,上面是一段利用MsAgent的代码:
<%@PageLanguage="C#"%>
<%@ImportNamespace="AgentObjects"%>
<%AxAgentObjects.AxAgentAxAgent=newAxAgentObjects.AxAgent();
IAgentCtlCharacterExCharacter;
AxAgent.Characters.Load("Genie",(object)"GENIE.ACS");
Character=AxAgent.Characters["Genie"];
Character.LanguageID=0x409;
//Displaythecharacter.Character.Show(null);
Character.Speak(“HelloWorld”,null);
Response.Write(Character.Name);
Character.Play("Wave");
Character.Play("Hide");
%>
当导进范例库今后,接着我们要创立这个类的实例,剩下的利用办法基础上和ASP使用组件差未几。
一切的COM组件挪用的办法基础上不异,正如在托管使用程序(C#、VisualBasic.NET)到场一个COM组件援用,接着体系要为这些非托管代码天生一个封装,实践上也是实行下面的步骤,即导进范例库。实践上这类办法能够用于一切的托管使用程序中,包含托管的C++代码、C#、VisualBasic.NET情况,.NET框架的这类互操纵性回护了组件开辟者的既有投资,并且为我们的托管程序计划供应了一条思绪。即我们能够把很多利用托管代码难以完成大概完成起来十分贫苦的功效(好比经由过程API函数挪用读写软盘硬盘物理扇区)封装到一个非托管COM组件中,经由过程组件挪用直接完成。
在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。

海妖 发表于 2015-1-19 10:34:53

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

精灵巫婆 发表于 2015-1-25 18:22:04

Asp.net脚本的出现,为ASP空间带来了更高的稳定性,同时也为程序员建站提供更高环境!

愤怒的大鸟 发表于 2015-2-3 12:57:39

ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。

飘灵儿 发表于 2015-2-9 02:28:58

PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。

简单生活 发表于 2015-2-26 18:52:06

市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。

第二个灵魂 发表于 2015-3-8 16:41:04

ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

老尸 发表于 2015-3-16 06:28:40

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

蒙在股里 发表于 2015-3-22 20:55:13

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
页: [1]
查看完整版本: ASP.NET网页编程之.NET使用技能:非托管COM组件的利用