欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VS2010&MFC下创建COM组件的一个小Demo

程序员文章站 2022-07-07 13:38:06
...

VS2010&MFC下创建COM组件的一个小Demo
1.VS2015中,新建一个MFC项目,取名TestCom,如下图所示: VS2010&MFC下创建COM组件的一个小Demo
图表 1

VS2010&MFC下创建COM组件的一个小Demo
图表 2

  1. 新建一个ATL项目ATLAlgo单独给算子用。右击解决方案“TestCom”——添加——新建项目——选择ATL项目——取名ATLAlgo——点击确定,如下图所示:
    VS2010&MFC下创建COM组件的一个小Demo
    图表 3

应用程序类型选择“动态链接库(DLL)”,支持选项选择“允许合并代理/存根代码”,“支持MFC”,“安全开发生命周期(SDL)检查”,如下图所示:
VS2010&MFC下创建COM组件的一个小Demo
图表 4
3.添加com组件。右击“ATLAlgo”项目——添加——类——选择ATL简单对象——点击添加,如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 5
类取名为Algo1,如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 6
线程模型选选择“单元”,接口选“双重”,支持选“ISupportErrorInfo”,聚合选“是”,点击完成,如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 7
4.在com组件中添加方法。如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 8
我们写个简单的返回两个数相加的函数:
Sum(long a,long b,*long nRet)
{
nRet = a+b;
}
首先添加3个参数,分别如下设置:
VS2010&MFC下创建COM组件的一个小Demo
图表 9 添加参数a
VS2010&MFC下创建COM组件的一个小Demo
图表 10 添加参数b
VS2010&MFC下创建COM组件的一个小Demo
图表 11 添加参数nRet(该参数为返回值)
VS2010&MFC下创建COM组件的一个小Demo
图表 12 方法函数名为Sum
选择local选项:
VS2010&MFC下创建COM组件的一个小Demo
图表 13 选择local选项
添加函数内容:
VS2010&MFC下创建COM组件的一个小Demo
图表 14添加方法函数实体
5.此时右击项目AtLAlgo,点击重新生成,则在工程文件夹下的Debug文件夹下会生成ATLAlgo.dll,即为dll形式的com组件,如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 15
6.右击项目AtLAlgo——属性——生成事件——后期生成事件——添加命令行:
regsvr32 $(TargetPath)
注:为了在编译的时候注册ATLAlgo.dll
copy $(TargetPath) $(SolutionDir)TestCom
注:为了将debug文件夹下的ATLAlgo.dll拷贝到TestCom项目的TestCom文件夹下,方便TestCom项目中调用该组件。
如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 16 添加命令行
7.在TestCom项目的TestComDlg.h文件中添加
#import “ATLAlgo.dll” no_namespace//1.添加ATLAlgo.dll
并在类中定义
CComPtr m_ptrAlgo1Com; //2.添加智能指针CComPtr替代接口指针IAlgo1
,从而让程序自动实现AddRef和Release,防止内存泄漏。注:释放智能指针直接赋值m_ptrAlgo1COM = NULL
如下图:
VS2010&MFC下创建COM组件的一个小Demo
图表 17
8.添加初始化com组件的代码,如下:

VS2010&MFC下创建COM组件的一个小Demo
图表 18
9.主界面添加一个Button1,并添加Button1的响应函数
void CTestComDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
long nRet = 0;
nRet = m_ptrAlgo1Com->Sum(1,2);//调用com组件中的算子Sum( )
CString str;
str.Format(_T(“1+2 = %d”),nRet);
AfxMessageBox(str);
}
运行结果如下:
VS2010&MFC下创建COM组件的一个小Demo

                                </div>