VB COM基础讲座之编译的实例选项
在测试文件组件之前,我们必须先编译它。但在进行这项工作之前,让我们先来浏览一下Visual Basic所给出来的一些额外选项。
在打开FileCheck代码窗口的同时,我们来看看它的属性窗口。
属性有Name、DataBindingBehaviour(用于将类和数据源相"绑定")、可持久性(用于控件中,允许保存某个类的属性)以及实例。
当类名属性修改后,我们或许不必担心前三项的属性。那么什么是实例呢?
实例(Instancing)属性决定自己的类对于使用ActiveX组件的应用程序来说是否可见。若可见,则在任何时候可运行不止一个的实例。
实例属性有很多选项,我们来看一下:
MultiUse —— 这可能是最常用的选项。它只提供给其他应用程序一个组件的实例,这个实例可以提供多个对象。这样就节约了内存空间并允许用户共享全局变量。
Private —— 除该组件内的对象,类对于其他对象是不可见的。它通常用于类单独被类中的其他对象所访问。
GlobalMultiUse —— 这个类的各种属性和方法可以象简单的全局函数那样被调用。另外,在VB中该类的实例不需要显式创建,因为它会自动创建。各种属性和方法都可从单独的一个组件实例中调用。
PublicNotCreatable —— 它表示只有在创建实例的前提下,该类才是可见的。换句话说,用户不能用New关键词创建一个类对象。用户的类对象必须选被创建,然后才可使用。这有点像DAO的记录集,用户不能创建一个新的记录集,而只能用OpenRecordset方法简单地打开它。
SingleUse —— 它表示每次在代码中开始的一个组件的新的实例,只能运行另一个ActiveX组件的实例。换句话说,每个实例都获得自己的"进程空间"。虽然还有一些限制,没有什么奇怪的,它和MultiUse是相对的。
GlobalSingleUse —— 类似于GlobalMultiUse,除了代码中创建的对象运行一个组件的新实例。
上述选项,我们很少全部都使用过。毫无疑问,MultiUse是最常见的,其次是Private和GlobalMultiUse,其他的一般很少使用。当然,我们不禁要问,在创建ActiveX DLLs时,我们能得到多少这样的选项呢?答案是明确,因为它们的工作方式是相同的。
好了,非常抱歉在前面过程中耽搁太多的时间,不过若不论及这些不常使用的实例选项,那么又有人会抱怨了。
行啦,让我们编译并测试我们的ActiveX EXE组件吧!
选择"File"->"Make File.exe";
选择一个文件名,然后按[OK]。
下一节,我们将创建一个测试应用程序。
VB COM基础讲座之创建测试程序
这里我们直接创建一个应用程序来测试一下前面生成的ActiveX EXE文件监视组件:
新建一个"Standard EXE"工程;
下面需要添加一个引用到我们的新的文件组件中去,然后添加少量的代码作尝试:
选择"Project"->"References"菜单;
选中"File"组件选项,然后单击[OK]按钮;
在表单的通用声明部分添加下列代码:
Dim WithEvents MyFileObject As FileCheck
从"Object"下拉列表中选择"MyFileObject";
确保插入符在FileFound事件程序中;
键入下列代码:
MsgBox "Found: " & Filename
在表单Form1中添加一个命令按钮;
在该按钮中添加下列代码:
Set MyFileObject = New FileCheck
MyFileObject.MonitorFile ("c:/test.txt")
这里,我们是将MyFileObject定义成FileCheck的一个新实例,然后用c:/test.txt参数运行MonitorFile方法。这时,程序在后台中启用计时器,且每隔60秒都来检测一次这个文件。
由于,我们的计算机中还没有这个文件,所以什么也没有发生。现在,我们用Notepad(记事本)在C盘中创建一个名为test.txt的文件。
则在60秒内,弹出一个消息对话框用来表示我们的文件被找到。这就是我们刚刚创建的ActiveX EXE!
对于上述这样的组件,使用异步处理是没有太大的必要的。正如我们以前讨论的那样,ActiveX EXE是有自己的进程空间的。因此,当计时器启用并检测文件的存在性时,它不会使其它程序暂停。而如果使用的是DLL,那么就可以使用异步处理了。
即使这样,你能在计时器中放入任何代码吗?是能放入创建大型报表的程序、复杂的计算代码,还是其他?
至此,我们构造了一些实际的常规组件,但我们还没有来得及讨论它们的发布问题,这将在下一节中进行。
VB COM基础讲座之发布组件
既然我们构造了这世界上最有魅力的ActiveX组件,就应该把它们发布出去。那么我们该怎么做呢?
幸运的是,发布COM组件是一件非常容易的事。 我们只要使用Package & Deployment(打包和展开)向导就可对计算机上的常规Visual Basic工程进行相应的操作。同样,该向导还适用于ActiveX工程。
但是,发布时只有ActiveX组件本身自己吗?如果不是,那么为何又要运行向导,单独地为自己的ActiveX工程创建一个安装程序?或是连同使用它的应用程序一起发布?对于常规工程来说,简单地创建一个安装,其组件就会自动被打包。
唔,可能就这么简单吧?