|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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,但是一般人家对算法的要求听高的。你最好还是学点应用型的吧。这种主要是研究型的。 |
|