一、创建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工程及使用C++测试COM组件

VS2012创建ATL工程及使用MFC测试COM组件的更多相关文章

  1. spring 学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试

    spring学习(一):使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试 ioc 概念 控制反转(Inversion of Control,缩写为IOC),是面向 ...

  2. Maven创建Web工程并执行构建/测试/打包/部署

    创建工程基本参考上一篇Java Application工程,不同的是命令参数变了,创建Web工程的命令如下: mvn archetype:generate -DgroupId=com.jsoft.te ...

  3. 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 ...

  4. C++基于ATL工程编写ActiveX控件步骤

    参考网址: https://blog.csdn.net/whui19890911/article/details/8896554 开发环境:VS2010 开发工程:C++ATL项目 开发目的:创建Ac ...

  5. Android:创建Android工程

    创建Android工程,在Eclipse左栏右键 new->project..   (版本不一样,名字会有所区别) 然后选择Android下的Android application projec ...

  6. 关于 VS2012 创建 MVC4 Empty 项目的一个小问题

    今天下午发现一个新建的项目工作异常,主要表现为应该返回JSON的Action没有返回JSON字符串,而是返回了JsonResult的对象名,即字符串“System.Web.Mvc.JsonResult ...

  7. 手把手教你解决无法创建 JPA 工程的问题

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703803.html ------------------------------------ ...

  8. myeclipse创建hibernate工程

    1.创建数据库: from blog http://www.cnblogs.com/zhaocundang/p/9061959.html 使用navicat mysql IDE: 创建数据库 book ...

  9. IntelliJ IDEA2017创建web工程并实现远程部署tomca【转载】

    [IntelliJ IDEA2017创建web工程并实现远程部署tomcat] 作者:https://segmentfault.com/a/1190000012762629 将应用打成war包方式 步 ...

随机推荐

  1. 如何用html把文本框外观格式设为只显示底部的横线

    html把文本框外观格式设为只显示底部的横线 <style> input[type='text']{background:none;border:none;border-bottom:1p ...

  2. 12月centos单词

    ---恢复内容开始--- UNreachable:adj.(network server unreachable) 不能达到的; 及不到的; 取不到的; 不能得到的; rsync: rsync [re ...

  3. 002-golang安装配置

    1.安装位置: 2.环境变量. path的值如下: 3.工作目录.

  4. [NOIP2005普及组]采药(01背包)

    题目描述 描述 辰辰是个很有潜能.天资聪颖的孩子,他的梦想是称为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到个到处都是草药的山洞里对他说 ...

  5. python中的作用域以及内置函数globals()-全局变量、locals()-局部变量

    在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变 ...

  6. Linux基础命令---添加组groupadd、删除组groupdel

    groupadd 指定群组名称来建立新的群组账号,需要时可以从系统中取得新的群组值. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora. ...

  7. NodeJS,JavaScript正在吞噬这个世界

    NodeJS,JavaScript正在吞噬这个世界 NodeJS,一个基于Google Chrome V8 JS引擎的服务器端JavaScript运行时,曾经被认识只是一个赶时髦的技术,有谁会想到,它 ...

  8. 新做了块avr开发板--tft屏研究用

    2010-05-04 14:03:00 测试效果不错,使用也方便.

  9. linux 3

    -- Linux -- 开心的一天 vi    所有的 unix like 系统都会内置 vi 文本编辑器 vim 较多使用的,可以主动的以字体颜色辨别语法的正确性,方便程序设计 vi/vim 的使用 ...

  10. Robot Framework 自动化测试--部署篇

    一.产品介绍 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架.它是为了端 到端的验收测试(End-To-End Acceptance Test)以及验收测试 ...