4. 利用ATL创建组件的实例
4.1. 创建步骤
首先在VC集成环境里建立一个新的工程,即从New对话框中Projects选项卡上选择ATL COM AppWizard,然后,输入工程的名字和其位置,工程的名字将成为最终生成的DLL或EXE文件的名字。点击OK按钮,其它的接受默认设置即可。现在即可在此项目里创建COM对象。在VC5.0以后的版本,在“Insert”菜单中点击“New ATL Object”菜单项,就弹出ATL Object Wizard对话框,它分为左右两个框,在左边框里选择“Objects”,在右边框里选择“Simple Object”,然后点击“Next”按钮。于是ATL Object Wizard Properties对话框将出现,在“Names”选项卡的“Short Name”中输入组件对象的名字,其它的属性会自动被填入,你也可以编辑改变它们。在“Attributes”选项卡中,接受默认设置即可。如有必要,可将线程模式改为“Both”,如果需要报告详细错误信息,可将“Support I Support Error Info”选中。
4.2. 创建实例和代码
下面以一个具体的实例实现一个组件DataAccess,它是将指定文件中的内容读取出来并存储在一个数组中,其短名字为ReadFile。此组件有一个方法:LoadFile,为了判断文件读取是否成功,应使得此方法的最后一个参数为布尔型返回值,并声明类型为[out, retval]。如是VC4.2版,在DataAccess.idl文件IReadFile:Idispatch块中加入如下代码:
[helpstring("Read File Data")] HRESULT LoadFile([in]BSTR FileName, [out,retval]BOOL* result);
如果是在VC5.0以后的版本中,在ClassView中右击IReadFile,在弹出的对话框中输入方法的名字LoadFile及其参数:
[in]BSTR FileName, [out,retval]BOOL* result
当点击“OK”后,相关的代码将被增加到.IDL,.H和.CPP文件中。在ReadFile.cpp文件中增加LoadFile方法如下:
4.3. 测试
为了测试所写的组件,可以编写一个测试程序。在New对话框中Projects选项卡上选择Win32 Console Application,输入工程名为test,选择“Add to current workspace”,并并将”Deendency of:”选项打勾。点击“OK”,其余的接受默认设置即可。现在即可在此工程里测试刚才所编写的组件。在test.cpp中,增加
在main主函数中包含如下语句:
为了验证组件是否完成所要求的功能,可在组件及测试程序中加入适当的输出语句。
以上程序在VC6.0中编译并测试通过,所编写的组件能够很好地完成要求。
5. 结束语
组件技术得到越来越广泛的应用,而VC提供的活动模板库为我们创建功能强大的COM组件提供了很好的框架。我们相信,本文总结的COM组件编写方法能对其他人员编写类似的组件程序有所帮助。
参考文献
[1] Dale Rogerson. Inside COM Microsoft Press,1997
[2] David J.Kruglinski. Inside Visual C++,4th Edition[M] Microsoft Press,1997
[3] Brent Rector, Chris Sells. ATL Internals Addison-Wesley Inc,2001
[4] Eugene Olafsen, Kenn Scribner, K.David White. MFC Programming with Visual C++6 Unleashed
Sams Publishing, 2000
[5] 候俊杰. 深入浅出MFC 第二版 松岗电脑图资料股份有限公司,1997
更多内容请看Wlan组网----家庭专题专题,或进入讨论组讨论。
4.1. 创建步骤
首先在VC集成环境里建立一个新的工程,即从New对话框中Projects选项卡上选择ATL COM AppWizard,然后,输入工程的名字和其位置,工程的名字将成为最终生成的DLL或EXE文件的名字。点击OK按钮,其它的接受默认设置即可。现在即可在此项目里创建COM对象。在VC5.0以后的版本,在“Insert”菜单中点击“New ATL Object”菜单项,就弹出ATL Object Wizard对话框,它分为左右两个框,在左边框里选择“Objects”,在右边框里选择“Simple Object”,然后点击“Next”按钮。于是ATL Object Wizard Properties对话框将出现,在“Names”选项卡的“Short Name”中输入组件对象的名字,其它的属性会自动被填入,你也可以编辑改变它们。在“Attributes”选项卡中,接受默认设置即可。如有必要,可将线程模式改为“Both”,如果需要报告详细错误信息,可将“Support I Support Error Info”选中。
4.2. 创建实例和代码
下面以一个具体的实例实现一个组件DataAccess,它是将指定文件中的内容读取出来并存储在一个数组中,其短名字为ReadFile。此组件有一个方法:LoadFile,为了判断文件读取是否成功,应使得此方法的最后一个参数为布尔型返回值,并声明类型为[out, retval]。如是VC4.2版,在DataAccess.idl文件IReadFile:Idispatch块中加入如下代码:
[helpstring("Read File Data")] HRESULT LoadFile([in]BSTR FileName, [out,retval]BOOL* result);
如果是在VC5.0以后的版本中,在ClassView中右击IReadFile,在弹出的对话框中输入方法的名字LoadFile及其参数:
[in]BSTR FileName, [out,retval]BOOL* result
当点击“OK”后,相关的代码将被增加到.IDL,.H和.CPP文件中。在ReadFile.cpp文件中增加LoadFile方法如下:
| STDMETHODIMP CReadFile:: LoadFile (BSTR FileName,BOOL* result) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) CStdioFile f; CString FileData; Cstring Datas[255]; //用于存放从文件中读出的数据 int i=0; //数组下标 USES_CONVERSION; if(f.Open(W2A(FileName),CFile::modeRead)) { //文件成功打开 while(f.ReadString(FileData)) { //处理读出的数据 Datas[i]= FileData; i++; } f.Close(); *result=true; return S_OK; //关闭文件,返回结果为真 } else { //文件打开失败 *result=false; //返回参数为false return E_FAIL; } } |
4.3. 测试
为了测试所写的组件,可以编写一个测试程序。在New对话框中Projects选项卡上选择Win32 Console Application,输入工程名为test,选择“Add to current workspace”,并并将”Deendency of:”选项打勾。点击“OK”,其余的接受默认设置即可。现在即可在此工程里测试刚才所编写的组件。在test.cpp中,增加
| #include <atlbase.h> #include "..\DataAccess_i.c" #include "..\DataAccess.h" |
在main主函数中包含如下语句:
| IReadFile * pIRF=NULL; BOOL result=false; //初始化com库 HRESULT hr=::CoInitialize(NULL); if(FAILED(hr)) { //初始化失败 return -1; } hr=::CoCreateInstance(CLSID_ReadFile,NULL,CLSCTX_INPROC_SERVER,IID_IReadFile, (void**)&pIRF); if(FAILED(hr)) { //创建组件实例失败 return -1; } USES_CONVERSION; CString FILENAME=".\\Palette.txt"; hr=pIRF->LoadFile(A2W(FILENAME),&result); if(FAILED(hr)) { return -1; } |
为了验证组件是否完成所要求的功能,可在组件及测试程序中加入适当的输出语句。
以上程序在VC6.0中编译并测试通过,所编写的组件能够很好地完成要求。
5. 结束语
组件技术得到越来越广泛的应用,而VC提供的活动模板库为我们创建功能强大的COM组件提供了很好的框架。我们相信,本文总结的COM组件编写方法能对其他人员编写类似的组件程序有所帮助。
参考文献
[1] Dale Rogerson. Inside COM Microsoft Press,1997
[2] David J.Kruglinski. Inside Visual C++,4th Edition[M] Microsoft Press,1997
[3] Brent Rector, Chris Sells. ATL Internals Addison-Wesley Inc,2001
[4] Eugene Olafsen, Kenn Scribner, K.David White. MFC Programming with Visual C++6 Unleashed
Sams Publishing, 2000
[5] 候俊杰. 深入浅出MFC 第二版 松岗电脑图资料股份有限公司,1997
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·VC++动态链接库(DLL)编程深入浅出(二) (12257次浏览)
·VC++动态链接库(DLL)编程深入浅出(一) (11493次浏览)
·VC++动态链接库(DLL)编程深入浅出(三) (8377次浏览)
·深入浅出VC++串口编程之基于控件 (3136次浏览)
·深度解析VC中的消息传递机制 (2910次浏览)
·应用MFC开发高级应用程序 (2736次浏览)
·在VC中链接动态链接库的方法简要说明 (1328次浏览)
·用MFC ODBC操作Access数据库 (1228次浏览)
·最常见的20种VC++编译错误信息集合 (1195次浏览)
·制作HTML帮助 (1130次浏览)
·VC++动态链接库(DLL)编程深入浅出(一) (11493次浏览)
·VC++动态链接库(DLL)编程深入浅出(三) (8377次浏览)
·深入浅出VC++串口编程之基于控件 (3136次浏览)
·深度解析VC中的消息传递机制 (2910次浏览)
·应用MFC开发高级应用程序 (2736次浏览)
·在VC中链接动态链接库的方法简要说明 (1328次浏览)
·用MFC ODBC操作Access数据库 (1228次浏览)
·最常见的20种VC++编译错误信息集合 (1195次浏览)
·制作HTML帮助 (1130次浏览)
·属性表标签上的位图在MFC,CB下的实现 10-09
·采用 MFC 编制 MVC 模式之球体演示程序 10-09
·MFC架构下的DirectX8 10-09
·用VC++创建自定义向导程序 10-09
·VC++中的函数调用惯例 10-09
·VC++中的自定义消息 10-09
·一个在MFC环境中使用的 InfoZip打包类 10-09
·VC++中如何使文件夹浏览呈现新界面 10-09
·MFC Activex 录音机控件 10-09
·MFC程序员的WTL指南(1)中文版序言 10-09
·采用 MFC 编制 MVC 模式之球体演示程序 10-09
·MFC架构下的DirectX8 10-09
·用VC++创建自定义向导程序 10-09
·VC++中的函数调用惯例 10-09
·VC++中的自定义消息 10-09
·一个在MFC环境中使用的 InfoZip打包类 10-09
·VC++中如何使文件夹浏览呈现新界面 10-09
·MFC Activex 录音机控件 10-09
·MFC程序员的WTL指南(1)中文版序言 10-09
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



