仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 796|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之Visual C#创立和利用ActiveX组件

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:32:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
在经过全球个人PC市场占有90%的微软对asp.net不断优化与整合后,asp.net与微软自身平台的动用上更加的高效,加上asp.net在应用上非常容易上手,相信asp.net仍会是最多客户选用的脚本语言,并会在未来几年继续领跑。active|activex|visual|创立  开辟基于.Net平台上的程序员是很难从实质上把VisualC#和ActiveX组件联起来,固然在利用VisualC#开辟使用程序时,偶然为了疾速开辟大概因为.NetFrameWorkSDK的不完全,还必要借助ActiveX。但即便云云,也很难把两者接洽起来。个中的缘故原由就是可以被VisualC#间接利用文件和经由过程VisualC#天生的可实行程序只多是托管的文件。而ActiveX组件却都长短托管文件。这类文件的差别决意了两者实质"对峙"。因而这就引出了本文第一个成绩,ActiveX和VisualC#究竟是何种干系。
 
  一.VisualC#和ActiveX组件

  此时大概有些伴侣会说,既然可以被VisualC#间接利用只能是托管代码文件,那在VisualC#中供应的可间接经由过程援用挪用ActiveX又是怎样回事?切实其实VisualC#供应了援用ActiveX组件的操纵,这类操纵无效的使用了良多之前资本,使得这些资本并没有跟着微软推出.Net平台而因为平台的差别被"丢弃",但这类在VisualC#中引进ActiveX组件的操纵实在其实不被微软公司所倡议,也不切合微软推出.Net的终极目标。这是由于微软之以是推出.Net是为了完成跨平台,为了完成"WriteOnceandRunAnywhere",写一遍代码,能够在任何平台上运转的目标。假如程序中利用了ActiveX组件,这也就从另外一方面决意了此程序只能在Windows平台上利用,也就没法完成微软的"WriteOnceandRunAnywhere"终极方针了。

  再者VisualC#供应的援用ActiveX组件的操纵,实在ActiveX组件被到场VisualC#的"工具箱"时,VisualStuio.Net实在对ActiveX组件举行了良多操纵,而这些操纵又都被VisualC#埋没了,利用者常常其实不完整分明。这些操纵的感化就是把非托管的ActiveX组件转换成托管的组件,这些操纵统称"互操纵",仔细的程序员大概就会发明,当往程序窗体中拖进ActiveX组件后,源程序地点目次的"Bin"目次中就会新增多少个"Dll"文件,这些文件就是ActiveX组件举行互操纵转换后天生的。此时在VisualC#利用的并非ActiveX组件,而是由ActiveX组件举行互操纵失掉可供.Net平台利用的、功效和本来ActiveX组件不异的类库了。

  既然在VisualC#中不克不及间接利用ActiveX组件,那种看似在VisualC#中利用的ActiveX组件实在利用的是经由了互操纵后转换的类库。那末VisualC#是不是可以天生ActiveX组件?本文就来切磋一下VisualC#中天生ActiveX组件的完成办法。制造的办法就是起首经由过程VisualC#创立一个Windows组件,然后把其接口以COM情势公布便可。

  二.本文中先容的程序计划及运转情况

  (1).微软视窗2000服务器版。
 
  (2).VisualStudio.Net2003企业布局版,.NetFrameworkSDK4322。

  三.利用VisualC#创立Windows组件

  以下是利用VisualC#创立一个Windows组件的完成步骤:

  1.启动VisualStudio.Net。

  2.选择菜单【文件】|【新建】|【项目】后,弹出【新建项目】对话框。

  3.将【项目范例】设置为【VisualC#项目】。

  4.将【模板】设置为【类库】。

  5.在【称号】文本框中输出【ActiveXDotNet】。

  6.在【地位】的文本框中输出【C:Class】,然后单击【断定】按钮,则VisualC#则在"C:Class"目次中创立"ActiveXDotNet"文件夹,内里寄存的是ActiveXDotNet项目文件,详细如图01所示:


图01:创立类库的【新建项目】对话框
  7.选择【办理计划资本办理器】窗口,并从中上传Class1.cs文件,由于此文件在本程序中已没有效途了。

  8.选择【项目】|【增加组件】后,弹出【增加新项】对话框,在此对话框中设定【模板】为"组件类",设定【称号】值为"MyControl.cs"后,单击【翻开】按钮。则在项目文件中新增一个称号"MyControl.cs"的文件。详细如图02所示:


图02:在项目中【增加新项】对话框  9.把VisualStudio.Net确当前窗口切换到【MyControl.cs(计划)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往计划窗体中按按次拖进以下组件:

  一个GroupBox组件,并向此组件中再拖进,

  一个TextBox组件和一个Lable组件。

  10.把VisualStudio.Net确当前窗口切换到【MyControl.cs】代码编纂窗口,并用以下代码交换MyControl.cs中的InitializeComponent历程,以下代码是初始化上述到场的组件:

privatevoidInitializeComponent()
{
 this.groupBox1=newSystem.Windows.Forms.GroupBox();
 this.txtUserText=newSystem.Windows.Forms.TextBox();
 this.label1=newSystem.Windows.Forms.Label();
 this.groupBox1.SuspendLayout();
 this.SuspendLayout();
 this.groupBox1.Controls.Add(this.txtUserText);
 this.groupBox1.Controls.Add(this.label1);
 this.groupBox1.Location=newSystem.Drawing.Point(8,8);
 this.groupBox1.Name="groupBox1";
 this.groupBox1.Size=newSystem.Drawing.Size(272,56);
 this.groupBox1.TabIndex=0;
 this.groupBox1.TabStop=false;
 this.groupBox1.Text="VisualStudio.Net创立的ActiveX组件";
 this.txtUserText.Enabled=false;
 this.txtUserText.Location=newSystem.Drawing.Point(84,20);
 this.txtUserText.Name="txtUserText";
 this.txtUserText.Size=newSystem.Drawing.Size(180,21);
 this.txtUserText.TabIndex=1;
 this.txtUserText.Text="";
 this.label1.Location=newSystem.Drawing.Point(8,24);
 this.label1.Name="label1";
 this.label1.Size=newSystem.Drawing.Size(66,16);
 this.label1.TabIndex=0;
 this.label1.Text="输出信息:";
 this.Controls.Add(this.groupBox1);
 this.Name="MyControl";
 this.Size=newSystem.Drawing.Size(288,72);
 this.groupBox1.ResumeLayout(false);
 this.ResumeLayout(false);
}

  至此【ActiveXDotNet】项目创立的ActiveX组件的界面就基础完成了,详细如图03所示:


图03:【ActiveXDotNet】项目创立的ActiveX组件的计划界面
  11.在MyControl.cs中的【MyControl的择要申明】代码区中增加以下代码,以下代码是界说一个公用的接口,此接口是告知COM/COM+,这儿有一个公用的属性能够举行读写操纵:

publicinterfaceAxMyControl
{
 StringUserText{set;get;}
}

  12.在MyControl.cs的【MyControl】class代码区中增加以下代码,以下代码是起首界说一个公有的字符串,用此字符串来保留从Web测试页面中传送来的数值界说一个公用属性,在接上去的Web测试页面中,将经由过程这个属性来传送数值,此属性是可读写:

privateStringmStr_UserText;
publicStringUserText
{
 get{returnmStr_UserText;}
 set
 {
  mStr_UserText=value;
  //修正组件的数值
  txtUserText.Text=value;
 }
}

  13.保留下面的修正步骤,至此我们就使用VisualC#创立了一个称号为MyControl的class,这也就是用VisualC#封装的、酷似ActiveX组件的组件。

  14.单击快速键【Ctrl+F5】,则VisualC#会主动完成编译,并在"C:ClassActiveXDotNetinDebug"目次天生一个称号为"ActiveXDotNet.dll"文件,这就是发生的组件。

  以下是经由上述步骤发生的MyControl.cs的全体代码:

usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Drawing;
usingSystem.Data;
usingSystem.Windows.Forms;
namespaceActiveXDotNet
{
 publicinterfaceAxMyControl
 {
  StringUserText{set;get;}
 }
 ///<summary>
 ///MyControl的择要申明。
 ///</summary>
 publicclassMyControl:System.Windows.Forms.UserControl,AxMyControl
 {
  ///<summary>
  ///必须的计划器变量。
  ///</summary>
  privateSystem.ComponentModel.Containercomponents=null;
  privateSystem.Windows.Forms.GroupBoxgroupBox1;
  privateSystem.Windows.Forms.Labellabel1;
  privateSystem.Windows.Forms.TextBoxtxtUserText;
  privateStringmStr_UserText;
  publicStringUserText
  {
   get{returnmStr_UserText;}
   set
   {
    mStr_UserText=value;
    //修正组件的数值
    txtUserText.Text=value;
   }
  }
  publicMyControl()
  {
   //该挪用是Windows.Forms窗体计划器所必须的。
   InitializeComponent();

   //TODO:在InitializeComponent挪用后增加任何初始化
  }
  ///<summary>
  ///清算一切正在利用的资本。
  ///</summary>
  protectedoverridevoidDispose(booldisposing)
  {
   if(disposing)
   {
    if(components!=null)
    {
     components.Dispose();
    }
   }
   base.Dispose(disposing);
  }
  #region组件计划器天生的代码
  ///<summary>
  ///计划器撑持所需的办法-不要利用代码编纂器
  ///修正此办法的内容。
  ///</summary>
  privatevoidInitializeComponent()
  {
   this.groupBox1=newSystem.Windows.Forms.GroupBox();
   this.txtUserText=newSystem.Windows.Forms.TextBox();
   this.label1=newSystem.Windows.Forms.Label();
   this.groupBox1.SuspendLayout();
   this.SuspendLayout();
   this.groupBox1.Controls.Add(this.txtUserText);
   this.groupBox1.Controls.Add(this.label1);
   this.groupBox1.Location=newSystem.Drawing.Point(8,8);
   this.groupBox1.Name="groupBox1";
   this.groupBox1.Size=newSystem.Drawing.Size(272,56);
   this.groupBox1.TabIndex=0;
   this.groupBox1.TabStop=false;
   this.groupBox1.Text="VisualC#创立的ActiveX组件";
   this.txtUserText.Enabled=false;
   this.txtUserText.Location=newSystem.Drawing.Point(84,20);
   this.txtUserText.Name="txtUserText";
   this.txtUserText.Size=newSystem.Drawing.Size(180,21);
   this.txtUserText.TabIndex=1;
   this.txtUserText.Text="";
   this.label1.Location=newSystem.Drawing.Point(8,24);
   this.label1.Name="label1";
   this.label1.Size=newSystem.Drawing.Size(66,16);
   this.label1.TabIndex=0;
   this.label1.Text="输出信息:";
   this.Controls.Add(this.groupBox1);
   this.Name="MyControl";
   this.Size=newSystem.Drawing.Size(288,72);
   this.groupBox1.ResumeLayout(false);
   this.ResumeLayout(false);
  }
  #endregion
 }
}
  四.VisualC#中利用刚封装的ActiveX组件:

  以下步骤就是经由过程Web页面的体例来测试下面创立组件:

  1.创立一个称号为test.htm文件,MyControl就是放在此Web页面中加以测试的,此文件的内容以下:

<html>
<bodycolor=white>
<hr>

<fontface=arialsize=1>
<OBJECTid="MyControl1"name="MyControl1"classid="ActiveXDotNet.dll#ActiveXDotNet.MyControl"width=288height=72>
</OBJECT>
</font>

<formname="frm"id="frm">
<inputtype="text"name="txt"value="请输出数据:"><inputtype=buttonvalue="断定"onClick="doScript();">
</form>
<hr>
</body>

<scriptlanguage="javascript">
functiondoScript()
{
 MyControl1.UserText=frm.txt.value;
}
</script>
</html>

  2.把发生的"test.htm"和"ActiveXDotNet.dll"文件全体都拷贝到呆板的假造目次下,一样平常来讲假造目次是"C:Inetpubwwwroot"。

  3.翻开扫瞄器,在扫瞄器的地点栏中输出"http://localhost/test.htm"后,单击"转到"按钮,则会失掉以下的运转界面:


图04:测试用VisualC#发生的ActiveX组件的运转界面
  至此VisualC#发生的ActiveX组件和测试这个组件的全体事情就完成了。

  五.总结:

  固然本文先容的办法切实其实可以便利的办理Web页面中良多辣手的成绩,本文先容用VisualC#发生的组件的在有用性上切实其实十分的相似ActiveX组件,但从实质上说,本文发生的组件并非真正意义上的ActiveX组件。如要利用本文所创立的组件,必需在Web页面地点呆板上安装.Net框架,客户端会见Web页面时,也不会真正下载本文先容的组件,从而也不必要设定盘算机的平安级别就可以够会见利用此组件的Web页面。可见本文发生的组件实在质也是一个托管的代码文件。它只是奇妙的用界说接口的体例来告知COM/COM+工具,本组件有一个可供会见的公用属性,经由过程对此属性的读写操纵,完成相似ActiveX组件的事情。数据挖掘有点高深的,主要估计就是使用一些算法提取一些实用的数据。学好数据挖掘的话可以应聘baidu或者google,但是一般人家对算法的要求听高的。你最好还是学点应用型的吧。这种主要是研究型的。
海妖 该用户已被删除
沙发
发表于 2015-1-19 16:20:42 | 只看该作者
可以看作是VC和Java的混合体吧,尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性。
柔情似水 该用户已被删除
板凳
 楼主| 发表于 2015-1-25 17:34:31 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
蒙在股里 该用户已被删除
地板
发表于 2015-2-3 12:06:07 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
莫相离 该用户已被删除
5#
发表于 2015-2-8 20:53:35 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
再现理想 该用户已被删除
6#
发表于 2015-2-26 10:34:21 | 只看该作者
能产生和执行动态、交互式、高效率的站占服务器的应用程序。运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写。
活着的死人 该用户已被删除
7#
发表于 2015-3-8 13:37:07 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
变相怪杰 该用户已被删除
8#
发表于 2015-3-16 01:21:28 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
小魔女 该用户已被删除
9#
发表于 2015-3-22 18:31:01 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-10 06:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表