ATL COM 入门

开始
第一步 新建一个ATL项目
“文件”-> “新建”-> “项目”,打开“新建项目”对话框,展开Visual C++,选择ATL,在右边的模板中,选择“ATL项目”,确定项目名称“TestATLCom”
在应用程序设置向导中,请选择默认值。

第二步 在项目中创建一个简单的ATL对象
右击项目“TestATLCom”,打开右键菜单,选择“添加”->“类…”,打开“添加类”对话框,在左边“类别”选择“ATL”项,然后在右边“模板”中选择“ATL 简单对象”。添加后,进入“ATL 简单对象向导”

上图中,在“简称”处输入“MyCom”,其余的输入框内容会自动生成。下一步。


 

 

上图中,我要解释一下:
a) 首先,线程模型,此处我选择“单元”(Apartment),该值是默认的。
b) 第二,接口,此处有两个选项“双重”和“自定义”,我选择“双重”(使用双重接口的好处就是在脚本语言Javascript中也可使用该ATL对象)
c) 第三,聚合,作为一项ATL的高级功能,此处不作说明。
d) 再看“ISupportErrorInfo”,如果选择它,则可支持向使用这个ATL对象的客户端发送详细的错误信息。此处,我没有选择。
e) 最后,为了能从组件中调用事件,你要选择“连接点”
f) 点击“完成”,生成一个ATL对象。

完成第二步时,Visual Studio 会在项目中添加_IMyComEvents_CP.h、MyCom.h、MyCom.cpp三个文件,并在TestATLCom.idl ,添加了IMyCom 接口的定义信息。
备注:
*.idl 文件,作为接口定义语言文件,描述了ATL对象的接口。

第三步 为刚才建立的MyCom的接口IMyCom 添加方法和属性
打开“类视图”,选择“IMyCom”,右击打开右键菜单,展开“添加”,“添加”的子菜单有两项,分别是“添加方法(M)…”和“添加属性(T)…”。选择“添加方法(M)…”打开如下一个对话框

 

 

此处,我添加了一个“Add”方法,并且为了设置了3个参数,点击完成后,在*.idl文件中的IMyCom接口中定义了如下一个方法:
 [id(2), helpstring("方法Add")] HRESULT Add([in] LONG var1, [in] LONG var2, [out,retval] LONG* returnVal);
在MyCom.h 文件中添加了如下内容:
STDMETHOD(Add)(LONG var1, LONG var2, LONG* returnVal);
在MyCom.CPP 文件中添加了方法Add的定义:
STDMETHODIMP CMyCom::Add(LONG var1, LONG var2, LONG* returnVal)
{
 // TODO: 在此添加实现代码
 *returnVal = var1 + var2;  // 此处的代码是我之后加上去的
return S_OK;
}

编译通过。

第四步 为了验证刚才的ATL项目是有效的,则建立一个测试项目
建立一个MFC对话框

包含

#include "/TestATLCom.h"
#include "/TestATLCom_i.c"

其他就跟加载COM一样的

 ::CoInitialize(NULL);
 IMyCom *pFun = NULL;
 HRESULT hr = ::CoCreateInstance(CLSID_MyCom,NULL,CLSCTX_INPROC,IID_IMyCom,(LPVOID*)&pFun);
 long m_add=0;
 if(SUCCEEDED(hr))
 {
  hr = pFun->Add1(1,2,&m_add);
  if(FAILED(hr))
  {
   MessageBox(_T("操作组件失败!"),0,0);
  }
 }
 CString buff;
 buff.Format(_T("%ld"),m_add);
 MessageBox(buff);
 if(pFun)
  pFun->Release();
 ::CoUninitialize();
 UpdateData(0);
完毕!!!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值