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包方式 步 ...
随机推荐
- sqli-labs(八)——修改密码处sql注入+http头sql注入
第17关: 这是一个重置密码的功能存在sqk注入,尝试账号密码都输入'",发现只会显示登陆失败,没有报错信息. 这个时候先推测一下后台的sql形式大概应该是: update users se ...
- GetLastError()返回值列表
GetLastError()返回值列表: [0]-操作成功完成.[1]-功能错误.[2]-系统找不到指定的文件.[3]-系统找不到指定的路径.[4]-系统无法打开文件.[5]-拒绝访问.[6]-句柄无 ...
- c3p0:Connections could not be acquired from the underlying database!解决方案
在利用ssh框架做网站的时候遇到了一个比较棘手的问题,一直连接不上数据库,问题描述如下: 各种百度然后说的最多的解决方案是: 1,驱动配置有误:2,数据库连接地址有误:3,密码或帐号有误: 4,数据库 ...
- windows环境下搭建RocketMQ
https://blog.csdn.net/hsl_1990_08_15/article/details/80077552 安装完rocketmq后,报磁盘空间不足,只需要修改启动脚本runbroke ...
- RabbitMQ的使用场景
RabbitMQ的使用场景 1 大数据日志收集消息中间件应用场景 2 消息中间件在搜索系统DIH(伪实时)中的应用 伪实时的搜索系统: 后台系统:(作为生产者发送消息) ...
- Codeforces Round #323
div1 C 这题的是给了一个无限循环的子数组,问有多少个 (l,s)l代表起点s代表长度的循环串,使得所有的在原串中的每位都小于等于另外这个串(l<=n,1<=s<n) 像这样,我 ...
- 【Linux学习八】脚本编程
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 一.多层bash#.和source都是当前bash [root@nod ...
- greenplum presto impala选型与测评
查看原文请至:https://my.oschina.net/hblt147/blog/1843028
- 【Alpha版本】冲刺阶段——Day6
[Alpha版本]冲刺阶段--Day6 阅读目录 今日进展 问题困难 明日任务 今日贡献量 TODOlist [今日进展] 为注册模块增加界面代码 public static void Windows ...
- ADC采样对MIC的干扰
使用EFM8SB的MCU做ADC采样,检测MIC Bias的电源,解码android耳机的线控.初始时, ADC的采样频率2KHz, 在录音时后播放,能固定的听到接近2K的一个噪声.示波器探测不到明显 ...