Visual C#创建和使用 ActiveX 组件
2007 年 07 月 23 日 星期一 20:06
开发基于.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 服务器版。