基于VB的COM编程入门教程
第一节 COM简介
\世上无难事,只要肯登攀\,所以你要有信心成为一个COM程序员,而且你一定能。
事实上,我们每次设置文本编程控件的Text属性时,就已经在使用COM,同样在DAO数据控件运行MoveNext方法时,甚至在使用VB控制字时,也都是在使用COM。 那么,什么是COM呢? 首先,COM是一种通信的方式。
例如,就像我们的电视遥控一样。当我们按下某个频道按钮时,电视频道立马切换;而当我们按下开关按钮时,电视立即关闭等等。其实,我们并不关心它们是怎样工作的,我们只知道按下按钮就能产生某个动作就可以了。
程序的原理也是一样的。当改变文本编程控件的Text属性时,我们并不知道其中的原理,也许系统内部会调用几十个API函数也说不定?但对于用户来说,则只关心文本编程控件中显示的文本就可以了。 其次,COM是一种重用代码的方式。
使用COM的最大好处是一旦建立COM的通信方式后,可以方便地在任何地方使用多次。例如,当用户创建一个用于显示日期和时间的COM组件后,就可用于任何程序中的任何地方。不仅VB应用程序、Excel程序可以访问,而且C++应用程序也可以访问它。 所以,COM组件的代码可重用性是最主要的。 再次,COM是基于实际对象的。
用COM创建的大多数组件是基于实际对象的,这就意味着一旦组件被创建,其使用是相当容易的。试想一下,如果我们在计算机系统中再添加一个用户,又有哪种添加方式如Customer.Add那样简单,是添加数据处理代码包、算法,还是向应用程序添加较大的数据库DLL?很显然,COM就支持这种简单操作。 所以,COM是一种通信方式、一种代码重用方式以及基于实际对象的。
本教程的以后部分中将简单讨论COM和VB的相关内容,这包括类的创建,以及如何将类转换成一个实际对象。虽然,这里的内容太过简单,但却是以后COM编程的基础。
第二节 类的建立
在本节中,我们来实践一下。首先创建一个COM对象,然后使用它,最后再想法改进。 首先进行下面两步:
运行Visual Basic;选择 \工程类型;由于COM对象是基于类的,而类实际上是程序包,就像模块中的代码一样。所以:
选择\;当相应的对话框出现后,选择\,然后单击\按钮。 这样,在桌面上显示一个表单,以及包含在工程Project1中的Class1。 下面再将空的类的类名更改:
在类的属性窗口中,将类的Name属性改成CDog。
需要说明的是,为了区别起见,每个对象名的前面都有相应的前缀,例如Text Box对象前是\、Form
前是\、类前可以大写字母\或小写字母\,但这里使用前者。 下面我们添加一些代码来测试一下:
在CDog类通用声明部分中,添加变量的声明: Public Name As String 然后,打开Form1;
在表单中添加一个命令按钮;
打开代码窗口,为该命令按钮添加下列代码: Dim MyDog As CDog Set MyDog = New CDog MyDog.Name = \MsgBox MyDog.Name Set MyDog = Nothing 下面就来解释上述代码的含义:
Dim MyDog As CDog 该行语句是用来通知Visual Basic为CDog对象设置一个位空间,但这时还不能使用该对象,必须等到下条语句为止: Set MyDog = New CDog 它是用来创建CDog的实例。这就意味着前面空的MyDog模板变成了现在可以使用的CDog对象。
MyDog.Name = \ MsgBox MyDog.Name 上述代码的第一行是用来设置MyDog的Name变量,同时第二行语句是用来将该变量的内容显示在消息对话框中。最后: Set MyDog = Nothing 用来将MyDog对象简单的置空。 按F5键运行并测试。
怎么样?但同时,我们可能不禁要问,标准模块和类模块究竟有什么不同?我们再来看看下面的示例: 将命令按钮的代码变成:
Dim MyDog As CDog Set MyDog = New CDog Dim MyDog2 As CDog Set MyDog2 = New CDog MyDog.Name = \ MsgBox MyDog.Name MyDog2.Name = \ MsgBox MyDog2.Name Set MyDog = Nothing Set MyDog2 = Nothing 2
与最前面的代码不同的是,这里的代码实际上是定义两个对象MyDog和MyDog2,这两个对象是基于CDog的相互独立的两个对象。 按F5键运行并测试。
结果怎样?这一次是不是有两个对话框出现?一个显示\,另一个显示\。 上述定义的每个对象中除了Name外,没有任何实际的属性,因此下面过程就来添加: 打开前面的Class1; 声明下面的公共变量:
Public Age As Integer 打开前面的Form1;
将命令按钮的代码变成:
Dim MyDog As CDog Set MyDog = New CDog Dim MyDog2 As CDog Set MyDog2 = New CDog MyDog.Name = \ MyDog.Age = 4 MsgBox MyDog.Name & \ MyDog2.Name = \ MyDog2.Age = 7 MsgBox MyDog2.Name & \ Set MyDog = Nothing Set MyDog2 = Nothing 这些代码和前面差不多,只不过这里使用了Age变量。 按F5键运行并测试。
应该出现显示name和age内容的两个消息对话框。
现在再试着将其中一个对象的age值设置成1,000或者30,000。看看结果如何?程序照样正常运行,这是因为定义的整型变量最大值可达32,767,但是实际中的狗(Dog)是不会有30,000岁的。 那么,这种情况应该怎样处理呢?
第三节 添加属性
属性操作很像公共变量,但属性还有更多的控制。
常用属性通常包括\获取)\和\设置)\两种。这两项操作能规定一个主要属性,就像下面的代码片段:
Private intAge As Integer Public Property Get Age() As Integer Age = intAge End Property Public Property Let Age(ByVal vNewValue As Integer) intAge = vNewValue End Property 上述代码的工作方式极像Age变量的操作。当像下面语句操作变量时,
MyDog.Age = 4
3