visual c#创建和使用activex组件_c#应用
2008-02-23 05:44:05来源:互联网 阅读 ()
研发基于.Net平台上的程式员是很难从本质上把Visual C#和ActiveX组件联起来,虽然在使用Visual C#研发应用程式时,有时为了快速研发或由于.Net FrameWork SDK的不完整,还需要借助ActiveX。但即使如此,也很难把二者联系起来。
其中的原因就是能够被Visual C#直接使用文档和通过Visual C#生成的可执行程式只可能是托管的文档。而Active X组件却都是非托管文档。这种文档的差异决定了二者本质"对立"。于是这就引出了本文第一个问题,ActiveX和Visual C#到底是何种关系。
一.Visual C#和Active X组件:
此时可能有些朋友会说,既然能够被Visual C#直接使用只能是托管代码文档,那在Visual C#中提供的可直接通过引用调用ActiveX又是怎么回事?的确Visual C#提供了引用ActiveX组件的操作,这种操作有效的利用了很多以前资源,使得这些资源并没有随着微软推出.Net平台而由于平台的差异被"抛弃",但这种在Visual C#中引入ActiveX组件的操作其实并不被微软公司所倡导,也不符合微软推出.Net的最终目的。这是因为微软之所以推出.Net是为了实现跨平台,为了实现"Write Once and Run Anywhere",写一遍代码,能够在任何平台上运行的目的。假如程式中使用了Active X组件,这也就从另一方面决定了此程式只能在Windows平台上使用,也就无法实现微软的"Write Once and Run Anywhere"最终目标了。
再者Visual C#提供的引用ActiveX组件的操作,其实Active X组件被加入Visual C#的"工具箱"时,Visual Stuio .Net其实对ActiveX组件进行了很多操作,而这些操作又都被Visual C#隐藏了,使用者往往并不完全清楚。这些操作的作用就是把非托管的ActiveX组件转换成托管的组件,这些操作统称"互操作",细心的程式员可能就会发现,当往程式窗体中拖入ActiveX组件后,源程式所在目录的"Bin"目录中就会新增若干个"Dll"文档,这些文档就是Active X组件进行互操作转换后生成的。此时在Visual C#使用的并不是ActiveX组件,而是由ActiveX组件进行互操作得到可供.Net平台使用的、功能和原先ActiveX组件相同的类库了。
既然在Visual C#中不能直接使用ActiveX组件,那种看似在Visual C#中使用的ActiveX组件其实使用的是经过了互操作后转换的类库。那么Visual C#是否能够生成Active X组件?本文就来探讨一下Visual C#中生成ActiveX组件的实现方法。制作的方法就是首先通过Visual C#创建一个Windows组件,然后把其接口以COM形式发布即可。
二.本文中介绍的程式设计及运行环境:
(1).微软视窗2000 服务器版。
(2).Visual Studio .Net 2003企业结构版,.Net Framework SDK 4322。
三.使用Visual C#创建Windows组件:
以下是使用Visual C#创建一个Windows组件的实现步骤:
1.启动Visual Studio .Net。
2.选择菜单【文档】|【新建】|【项目】后,弹出【新建项目】对话框。
3.将【项目类型】配置为【Visual C#项目】。
4.将【模板】配置为【类库】。
5.在【名称】文本框中输入【ActiveXDotNet】。
6.在【位置】的文本框中输入【C:\Class】,然后单击【确定】按钮,则Visual C#则在"C:\Class"目录中创建"ActiveXDotNet"文档夹,里面存放的是ActiveXDotNet项目文档
7.选择【解决方案资源管理器】窗口,并从中上传Class1.cs文档,因为此文档在本程式中已没有用途了。
8.选择【项目】|【添加组件】后,弹出【添加新项】对话框,在此对话框中设定【模板】为"组件类",设定【名称】值为"MyControl.cs"后,单击【打开】按钮。则在项目文档中新增一个名称"MyControl.cs"的文档。
9. 把Visual Studio .Net的当前窗口转换到【MyControl.cs(设计)】窗口,并从【工具箱】中的【Windows窗体组件】选项卡中往设计窗体中按顺序拖入下列组件:
一个GroupBox组件,并向此组件中再拖入,
一个TextBox组件和一个Lable组件。
10. 把Visual Studio .Net的当前窗口转换到【MyControl.cs】代码编辑窗口,并用下列代码替换MyControl.cs中的InitializeComponent过程,下列代码是初始化上述加入的组件:
private void InitializeComponent ( )
{
this.groupBox1 = new System.Windows.Forms.GroupBox ( ) ;
this.txtUserText = new System.Windows.Forms.TextBox ( ) ;
this.label1 = new System.Windows.Forms.Label ( ) ;
this.groupBox1.SuspendLayout ( ) ;
this.SuspendLayout ( ) ;
this.groupBox1.Controls.Add ( this.txtUserText ) ;
this.groupBox1.Controls.Add ( this.label1 ) ;
this.groupBox1.Location = new System.Drawing.Point ( 8 , 8 ) ;
this.groupBox1.Name = "groupBox1" ;
this.groupBox1.Size = new System.Drawing.Size ( 272 , 56 ) ;
this.groupBox1.TabIndex = 0 ;
this.groupBox1.TabStop = false ;
this.groupBox1.Text = "Visual Studio .Net创建的Active X组件" ;
this.txtUserText.Enabled = false ;
this.txtUserText.Location = new System.Drawing.Point ( 84 , 20 ) ;
this.txtUserText.Name = "txtUserText" ;
this.txtUserText.Size = new System.Drawing.Size ( 180 , 21 ) ;
this.txtUserText.TabIndex = 1 ;
this.txtUserText.Text = "" ;
this.label1.Location = new System.Drawing.Point ( 8 , 24 ) ;
this.label1.Name = "label1" ;
this.label1.Size = new System.Drawing.Size ( 66 , 16 ) ;
this.label1.TabIndex = 0 ;
this.label1.Text = "输入信息:" ;
this.Controls.Add ( this.groupBox1 ) ;
this.Name = "MyControl" ;
this.Size = new System.Drawing.Size ( 288 , 72 ) ;
this.groupBox1.ResumeLayout ( false ) ;
this.ResumeLayout ( false ) ;
}
至此【ActiveXDotNet】项目创建的Active X组件的界面就基本完成了
11. 在MyControl.cs中的【MyControl 的摘要说明】代码区中添加下列代码,以下代码是定义一个公用的接口,此接口是告诉COM/COM ,这儿有一个公用的属性能够进行读写操作:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash