ATL的应用举例
上面介绍了使用ATL创建一个COM服务程序的基本过程。在介绍过程中,我们实际上已经生成了一个COM服务程序的基本框架,只是没有填写实际的内容。在下面部分,我们实际开发一个十分简单的COM服务程序,并且为它编写一段客户代码进行测试,使大家对使用ATL开发COM服务程序的过程有一个全面整体的了解。
我们要开发的服务程序的功能很简单,它只实现一个接口,这个接口名字是ISimpleInterface,接口只有一个成员函数,叫做Welcome。这个函数的功能只是输出一个“Hello World!”的字符串。
按照上一部分介绍的创建COM服务程序的步骤,我们进行如下的操作:
1.打开Visual C++集成开发环境;
2.创建一个称为SimpleTest的ATL工程;
3.在这个工程中插入新的对象,对象的名字是SimpleInterface;
4.设置接口ISimpleInterface的有关属性,使它成为一个双接口;
5.在对象的接口ISimpleInterface中加入方法Welcome;
6.打开ATL加入的Welcome方法的框架,可以看到如下的代码段: STDMETHODIMPCActiveXObject::get_TestProp(long*pVal){AFX_MANAGE_STATE(AfxGetStaticModuleState())//TODO:AddyourimplementationcodeherereturnS_OK;}7.将程序框架中的注释部分替换为下面的代码: ::MessageBox(NULL,_T(”HelloWorld!”),_T(”Welcome”),MB_OK);Welcome方法被调用时将弹出一个消息框。
8.编译连接工程。
上面的步骤完成以后,我们就有了一个简单的COM服务程序,而且已经被注册到当前系统中。
下面我们要完成一个简单的COM客户程序。一个COM客户程序简单地说是使用COM组件对象的程序。客户程序调用COM对象的基本流程是:
创建COM对象的实例。这可以通过调用Windows系统的API函数CoCreateInstance来完成。
通过接口调用函数。
调用IUnknown::Release释放COM对象实例
我们的客户程序是使用MFC编写的一个基于对话框的简单应用程序。具体的过程如下:
1.打开Visual C++集成开发环境;
创建一个称为SimpleClient的基于对话框的MFC工程;
在对话框中加入一个按钮,名字为TEST;
在SimpleClientDlg.cpp文件中加入如下的代码:
⑴ 在cpp文件 #include “simpleclientdlg.h”之后加入下面的代码: #included:\simpletest\simpletest.h#included:\simpletest\simpletest_i.c加入的头文件是在编译COM服务程序过程中自动生成的,其中包含接口本身的定义、接口IID的定义和COM对象的CLSID的定义。包含该头文件可以使客户程序能够使用COM服务程序。
⑵ 在按钮TEST的消息控制函数中加入如下的代码: CoInitialize(0);HRESULThr;ISimpleInterface*pIntf=NULL;hr=CoCreateInstance(CLSID_SimpleInterface,NULL,CLSCTX_SERVER,IID_ISimpleInterface,(void**)&pIntf);if(SUCCEEDED(hr)){pIntf->Welcome();pIntf->Release();}CoUninitialize();上面的代码首先通过系统API CoCreateInstance创建COM对象,得到接口的指针,然后调用接口成员函数Welcome,最后通过IUnknown::Release()函数释放COM对象实例。
编译连接客户程序
最后,我们可以测试客户程序是否正常运行。启动客户程序,当单击“TEST”按钮时我们可以看到弹出一个消息框,这正是我们的COM服务程序提供的功能。
2024-11-22 广告