上面分别用MFC和ATL两个工具开发了两个进程内COM组件MFCCOM.DLL和ATLCOM.DLL,伴随着两个DLL产生的还有两个类型库MFCCOM.TLB和ATLCOM.TLB,顾名思义,类型库中包含了组件类的类型信息。通过ClassWizard可以直接阅读组件的类型库,并根据其中的类型信息产生包装类型库中每个接口的类,通过包装类的成员函数使用组件提供的功能。下面,我们就建立一个客户程序,演示COM组件的使用过程(两个组件的使用过程一样,这里以一个为例,读者参照本例可以测试使用另外一个)。
1. 创建CLWUSECOM项目
使用MFC AppWizard(exe)建立一个基于对话框框架的项目,Wizard的所有设置均使用缺省值。
2. 初始化COM库
在应用程序中的CCLWUSECOMApp类的InitInstance成员函数的开始处添加初始化COM库的代码:
3. 创建组件包装类
打开ClassWizard,单击“Add Class”后选择From a Type Library(来自类型库)。找到并打开类型库文件。这里要使用MFCCOM组件的类型库,它的位置在MFCCOM项目文件夹的DEBUG子文件夹下。
打开类型库会弹出Confirm Class对话框,其中列出了ClassWizard要产生的包装类。MFCCOM类型库非常简单,ClassWizard将只产生ICharset一个类,其头文件和实现文件名称也列于对话框中,ClassWizard将创建它们并添加至项目。
4. 使用包装类
产生的包装类在项目中的使用方式和其它类的使用方式是一样的:首先在对话框类CCLWUSECOMDlg中添加一个ICharset的成员变量:
(www.xing528.com)
然后分别在该对话框类的OnInitDialog和OnClose函数中创建和撤销Charset组件对象。它们的修改代码如程序清单8-18所示。
程序清单8-18 OnInitDialog和OnClose函数
在上面的程序中,使用了组件的另一种ID标识ProgID来创建组件对象,当一个组件DLL注册之后,它的组件信息包括ProgID能在Visual C++平台提供的工具中查看到。查看方法是:选择菜单的Tools->OLE/COM Object Viewer命令,在弹出的窗口中打开左边树状视图的Objects\All Objects子树分支,找到以MFCCOM(即组件DLL名字)开头的节点,如图8-18所示,在这个节点的信息中能够看到当前组件的ProgID。
图8-18 在OLE/COM Object Viewer窗口中查看组件信息
最后在对话框模板上添加一个按钮“CHARSET”,此按钮响应鼠标单击的消息,消息处理函数是OnButtonCharset。(按钮对应的ID为IDC_BUTTON_CHARSET)
5. 编译运行使用组件的客户程序
使用Build命令编译连接这个使用组件的对话框程序,在运行之前,要先注册组件的动态链接库(使用Regsvr32.exe)注册后,运行程序,它实现的功能和我们预期的一样!
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。