VS2012创建ATL工程及使用MFC测试COM组件
2017-12-26 17:11
821 查看
一、创建ATL工程
1、创建ATL项目,取名为ATLMyCom
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/09f934f3f4ed0c9b2c1ed379d2a6cccf.png)
2、在ATL项目向导中,勾选【支持MFC】(利用MFC测试用)、【支持 COM+ 1.0】,其余的选项默认,点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/a615535c005bcf24c1f1b7fa763e307e.png)
3、右键工程名称,选择添加类,接下来选择【ATL简单对象】。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/51a3a644cbf4e0da5b5dce546c81a716.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/05cb39c8f7eebce4cf47259a809fa955.png)
4、在【ATL简单对象向导】对话框中填入自己定义的类名,然后直接点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/37ff2555dd278984f56416be58691a21.png)
5、切换到类视图,为刚刚添加的接口IMyATLClass添加方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/bea04e8c3695c26396444c73c5b83157.png)
6、现在来添加2个方法,分别用来计算两个数之和和弹出MFC对话框,填写方法名务必确定in(输入)还是out(输出) 返回指针要是retval。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/956acbe1b64e74740acbfcc2dab5d190.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7eea22666cb85eb839036a3be6377883.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/948601b53f2a858a3a648444155d66cd.png)
7、切换到【解决方案资源管理器】,在ATLMyCom.idl文件中可以看到Sum和PopupDialog的定义。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7d5c270977826c17b680e0ee1ad3794f.png)
8、打开MyATLClass.cpp,实现添加的两个方法。
CString str(pstr);
AfxMessageBox((LPCTSTR)str);
9、Build该工程,得到ATLMyCom.dll并在注册表中注册。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/8235a55558b9f603dbb479fb200675e7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/d6858155baf863e27d1df137f203e024.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/01acfb0f4f8392928782d57b49b2da84.png)
二、测试ATL组件
1、在上面的工程中添加测试项目。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/cc0dc1941f2be3ca29e58e5082c99acd.png)
2、添加用于测试的MFC工程TestATL。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/e40413f268df595aac66509386964851.png)
3、运行MFC应用程序向导,为简单起见,选择对话框工程,其余默认,点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/d21f3e6e9c3a533649f8bc472bafa456.png)
4、将生成的对话框中【确定】修改为Sum、【取消】按钮修改为PopupDialog。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/b9e84231873a31320d0925bec2646453.png)
5、双击上面的按钮,在系统生成的函数里删除掉代码CDialogEx::OnBnClickedSum;如下。
6、在TestATL工程中引入由MyATL工程中生成的“ATLMyCom_i.h”、“ATLMyCom_i.c”(这个文件主要用来查看CLSID_MyATLClass和IID_IMyATLClass的值),并在TestATLDlg.cpp中添加ATLMyCom_i.h的引用。
7、实现Sum按钮的响应方法。
IMyATLClass* pMyATLClass = NULL;
hr = CoCreateInstance(CLSID_MyATLCLass, NULL, CLSCTX_INPROC_SERVER,__uuidof(IMyATLCLass), (void **)&pMyATLClass);
int sum = 0;
pMyATLClass->Sum(2, 3, (LONG*)&sum);
CString str;
str.Format(L"%d",sum);
AfxMessageBox((LPCTSTR)str);
pMyATLClass->Release();
CoUninitialize();
运行测试:
COM组件编译选项(保证在第三方电脑上没有VS运行环境也能正常运行)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/dfb8e8fa17453181ae3a938629c35e17.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/b1b8574c612dff00774ef472135afdb4.png)
测试工程:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/713ae183100d5f6881cdd32ec552b21e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/2087d34508d705e2c4f106241aa3659a.png)
结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/95ad461af5af0480bd2f5f8f63f001ae.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3119c0dc826adafa1260f338210ecabd.png)
VS2012创建ATL工程及使用C++测试COM组件
1、创建ATL项目,取名为ATLMyCom
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/09f934f3f4ed0c9b2c1ed379d2a6cccf.png)
2、在ATL项目向导中,勾选【支持MFC】(利用MFC测试用)、【支持 COM+ 1.0】,其余的选项默认,点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/a615535c005bcf24c1f1b7fa763e307e.png)
3、右键工程名称,选择添加类,接下来选择【ATL简单对象】。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/51a3a644cbf4e0da5b5dce546c81a716.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/05cb39c8f7eebce4cf47259a809fa955.png)
4、在【ATL简单对象向导】对话框中填入自己定义的类名,然后直接点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/37ff2555dd278984f56416be58691a21.png)
5、切换到类视图,为刚刚添加的接口IMyATLClass添加方法
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/bea04e8c3695c26396444c73c5b83157.png)
6、现在来添加2个方法,分别用来计算两个数之和和弹出MFC对话框,填写方法名务必确定in(输入)还是out(输出) 返回指针要是retval。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/956acbe1b64e74740acbfcc2dab5d190.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7eea22666cb85eb839036a3be6377883.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/948601b53f2a858a3a648444155d66cd.png)
7、切换到【解决方案资源管理器】,在ATLMyCom.idl文件中可以看到Sum和PopupDialog的定义。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/7d5c270977826c17b680e0ee1ad3794f.png)
8、打开MyATLClass.cpp,实现添加的两个方法。
STDMETHODIMP CMyATLCLass::Sum(LONG param1, LONG param2, LONG* pVal) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: Add your implementation code here *pVal = param1 + param2; return S_OK; } STDMETHODIMP CMyATLCLass::PopupDialog(CHAR* pstr) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); // TODO: Add your implementation code here
CString str(pstr);
AfxMessageBox((LPCTSTR)str);
return S_OK; }
9、Build该工程,得到ATLMyCom.dll并在注册表中注册。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/8235a55558b9f603dbb479fb200675e7.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/d6858155baf863e27d1df137f203e024.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/01acfb0f4f8392928782d57b49b2da84.png)
二、测试ATL组件
1、在上面的工程中添加测试项目。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/cc0dc1941f2be3ca29e58e5082c99acd.png)
2、添加用于测试的MFC工程TestATL。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/e40413f268df595aac66509386964851.png)
3、运行MFC应用程序向导,为简单起见,选择对话框工程,其余默认,点击完成。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/d21f3e6e9c3a533649f8bc472bafa456.png)
4、将生成的对话框中【确定】修改为Sum、【取消】按钮修改为PopupDialog。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/b9e84231873a31320d0925bec2646453.png)
5、双击上面的按钮,在系统生成的函数里删除掉代码CDialogEx::OnBnClickedSum;如下。
void CTestATLDlg::OnBnClickedSum() { // TODO: Add your control notification handler code here } void CTestATLDlg::OnBnClickedPopup() { // TODO: Add your control notification handler code here }
6、在TestATL工程中引入由MyATL工程中生成的“ATLMyCom_i.h”、“ATLMyCom_i.c”(这个文件主要用来查看CLSID_MyATLClass和IID_IMyATLClass的值),并在TestATLDlg.cpp中添加ATLMyCom_i.h的引用。
#include "..\ATLMyCom\ATLMyCom_i.h" #include "..\ATLMyCom\ATLMyCom_i.c"
7、实现Sum按钮的响应方法。
void CTestATLDlg::OnBnClickedSum() { // TODO: Add your control notification handler code here HRESULT hr = S_OK; hr = CoInitialize(NULL);
IMyATLClass* pMyATLClass = NULL;
hr = CoCreateInstance(CLSID_MyATLCLass, NULL, CLSCTX_INPROC_SERVER,__uuidof(IMyATLCLass), (void **)&pMyATLClass);
int sum = 0;
pMyATLClass->Sum(2, 3, (LONG*)&sum);
CString str;
str.Format(L"%d",sum);
AfxMessageBox((LPCTSTR)str);
pMyATLClass->Release();
CoUninitialize();
} void CTestATLDlg::OnBnClickedPopup() { // TODO: Add your control notification handler code here HRESULT hr = S_OK; hr = CoInitialize(NULL); IMyATLClass* pMyATLClass = NULL; hr = CoCreateInstance(CLSID_MyATLCLass, NULL, CLSCTX_INPROC_SERVER,__uuidof(IMyATLCLass), (void **)&pMyATLClass); pMyATLClass->PopupDialog("test ATL"); pMyATLClass->Release(); CoUninitialize(); }
运行测试:
COM组件编译选项(保证在第三方电脑上没有VS运行环境也能正常运行)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/dfb8e8fa17453181ae3a938629c35e17.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/b1b8574c612dff00774ef472135afdb4.png)
测试工程:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/713ae183100d5f6881cdd32ec552b21e.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/2087d34508d705e2c4f106241aa3659a.png)
结果:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/95ad461af5af0480bd2f5f8f63f001ae.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202001/28/3119c0dc826adafa1260f338210ecabd.png)
VS2012创建ATL工程及使用C++测试COM组件
相关文章推荐
- VS2012创建ATL工程及使用MFC测试COM组件
- VS2012创建ATL工程及使用MFC测试COM组件
- VS2012创建ATL工程及使用MFC测试COM组件
- 创建ATL工程及使用MFC测试COM组件
- VS2010创建ATL工程及使用C++测试COM组件
- 创建ATL工程及使用C++测试COM组件
- 这是我学习COM遇到的几个基本问题其解决 黄森堂(vcmfc)著 1.我用ATL生成一个组件对象,我在COM中使用IDD_IEncrypt,这个在哪里写义,是啥?GUID? 答:IDD_IEncry
- VS2010创建ATL工程及使用C++测试COM组件
- 利用ATL创建com组件和如何在程序中使用组件的接口函数和设置接口的属性
- 用VS2012做MFC ActiveX控件并使用html、c#、c++测试容器
- [COM/ATL]组件、对象、MFC、ATL的区别
- 使用Atl 创建Com对象需要注意的问题
- 通过ATL开发COM_3实现类厂和组件的创建
- [COM/ATL]组件、对象、MFC、ATL的区别
- vs2010中创建DLL文件,并在另外一个工程中使用测试或使用它
- MFC ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试
- MFC,STL,COM,ATL中使用了哪些设计模式
- 使用vs2010创建MFC工程后,vs2010的bug,不知道你们有没有
- C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试