VS2012创建ATL工程及使用MFC测试COM组件
一、创建ATL工程
1、创建ATL项目,取名为ATLMyCom

2、在ATL项目向导中,勾选【支持MFC】(利用MFC测试用)、【支持 COM+ 1.0】,其余的选项默认,点击完成。

3、右键工程名称,选择添加类,接下来选择【ATL简单对象】。


4、在【ATL简单对象向导】对话框中填入自己定义的类名,然后直接点击完成。

5、切换到类视图,为刚刚添加的接口IMyATLClass添加方法

6、现在来添加2个方法,分别用来计算两个数之和和弹出MFC对话框,填写方法名务必确定in(输入)还是out(输出) 返回指针要是retval。



7、切换到【解决方案资源管理器】,在ATLMyCom.idl文件中可以看到Sum和PopupDialog的定义。

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并在注册表中注册。



二、测试ATL组件
1、在上面的工程中添加测试项目。

2、添加用于测试的MFC工程TestATL。

3、运行MFC应用程序向导,为简单起见,选择对话框工程,其余默认,点击完成。

4、将生成的对话框中【确定】修改为Sum、【取消】按钮修改为PopupDialog。

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运行环境也能正常运行)


测试工程:


结果:

VS2012创建ATL工程及使用MFC测试COM组件的更多相关文章
- spring 学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试
spring学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试 ioc 概念 控制反转(Inversion of Control,缩写为IOC),是面向 ...
- Maven创建Web工程并执行构建/测试/打包/部署
创建工程基本参考上一篇Java Application工程,不同的是命令参数变了,创建Web工程的命令如下: mvn archetype:generate -DgroupId=com.jsoft.te ...
- VS2012与VS2015同时安装用VS2012创建MFC程序时弹出编译错误”fatal error C1083: 无法打开包括文件:“mprapidef.h”: No such file or directory”的解决办法
在WIndows 7操作系统上同时安装VS2012与VS2015并用VS2012创建MFC程序时弹出编译错误”fatal error C1083: 无法打开包括文件:“mprapidef.h”: No ...
- C++基于ATL工程编写ActiveX控件步骤
参考网址: https://blog.csdn.net/whui19890911/article/details/8896554 开发环境:VS2010 开发工程:C++ATL项目 开发目的:创建Ac ...
- Android:创建Android工程
创建Android工程,在Eclipse左栏右键 new->project.. (版本不一样,名字会有所区别) 然后选择Android下的Android application projec ...
- 关于 VS2012 创建 MVC4 Empty 项目的一个小问题
今天下午发现一个新建的项目工作异常,主要表现为应该返回JSON的Action没有返回JSON字符串,而是返回了JsonResult的对象名,即字符串“System.Web.Mvc.JsonResult ...
- 手把手教你解决无法创建 JPA 工程的问题
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703803.html ------------------------------------ ...
- myeclipse创建hibernate工程
1.创建数据库: from blog http://www.cnblogs.com/zhaocundang/p/9061959.html 使用navicat mysql IDE: 创建数据库 book ...
- IntelliJ IDEA2017创建web工程并实现远程部署tomca【转载】
[IntelliJ IDEA2017创建web工程并实现远程部署tomcat] 作者:https://segmentfault.com/a/1190000012762629 将应用打成war包方式 步 ...
随机推荐
- “0x00,0x08”两个十六进制字符串,转换为整形
int m_length=0;char buf[2]=={0x00,0x08};memcpy(&m_length,&buf[0],2); m_length=m_length<&l ...
- MyBatis基础入门《十二》删除数据 - @Param参数
MyBatis基础入门<十二>删除数据 - @Param参数 描述: 删除数据,这里使用了@Param这个注解,其实在代码中,不使用这个注解也可以的.只是为了学习这个@Param注解,为此 ...
- JavaScript 字符串replace全局替换
一般使用replace let str = "2018-8-14"; str.replace('-','/')//2018/8-14 并没有替换第二个”-“, 所以我们用正则表达式 ...
- Jenkins实现自动化部署
首先登录到服务器,目前我所使用的program-DEV环境所在服务器为:IP 登录密码为:密码 1.基础配置 检查所有环境变量: $ env 2.下载安装包安装 JDK:由于本机器已经安装,这 ...
- Yii GridView
- html5-文本属性
/*p{color: red;width: 50%;text-align: center;background: blue;}p{text-align: end;}p{text-align: end; ...
- UITableView 的坑
1.cell的view和contentView的区别 1.1 addSubView UITableViewCell实例上添加子视图,有两种方式:[cell addSubview:view]或[cell ...
- 利用python 数据分析入门,详细教程,教小白快速入门
这是一篇的数据的分析的典型案列,本人也是经历一次从无到有的过程,倍感珍惜,所以将其详细的记录下来,用来帮助后来者快速入门,,希望你能看到最后! 需求:对obo文件进行解析,输出为json字典格式 数据 ...
- svn安装使用
SVN安装使用 获取项目 1.首先新建文件夹.如:测试项目. 2.接着鼠标右键选择:SVN Checkout/SVN 检出 3.在出行的对话框中输入仓库地址.如:svn://198.021.262/2 ...
- TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络
TensorFlow入门,基本介绍,基本概念,计算图,pip安装,helloworld示例,实现简单的神经网络