(未完成)

ATL 简介

自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。广大开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。COM编程一度被视为一种高不可攀的技术,令人望而却步。开发人员希望能够有一种方便快捷的COM开发工具,提高开发效率,更好地利用这项技术。
—-针对这种情况,Microsoft公司在推出COMSDK以后,为简化COM编程,提高开发效率,采取了许多方案,特别是在MFC(MicrosoftFoundationClass)中加入了对COM和OLE的支持。但是随着Internet的发展,分布式的组件技术要求COM组件能够在网络上传输,而又尽量节约宝贵的网络带宽资源。采用MFC开发的COM组件由于种种限制不能很好地满足这种需求,因此Microsoft在1995年又推出了一种全新的COM开发工具——ATL。
—-ATL是ActiveXTemplateLibrary的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码,同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。为了方便使用,从MicrosoftVisualC++5.0版本开始,Microsoft把ATL集成到VisualC++开发环境中。1998年9月推出的VisualStudio6.0集成了ATL3.0版本。目前,ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C++开发人员的重视。

创建项目

VS最好以管理员权限打开,因为最后运行的时候需要执行regsvr32程序,如果VS没有权限可能会提示:

error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

如果还不行 就把链接器-常规-注册输出改为否,用命令行注册该组件。

  1. 新建 vc++ atl项目:FirstCOM
  2. 钩选 “支持COM+ 1.0“ ”支持部件注册器“,完成。
  3. 添加类
    ATL COM开发学习_c语言

选择 ATL , ATL简单对象,添加。
4. 简称填写:FirstClass,ProgID填写FirstCOM.math,完成。
5. 右击IFirstClass类,添加、添加方法
6. 方法名输入Add
ATL COM开发学习_microsoft_02
点击下一步、完成。

到解决方案资源管理器,点开FirstCOM.idl,可以看到生成的方法:

interface IFirstClass : IDispatch{
[id(1)] HRESULT Add([in] LONG* para1, [in] LONG* para2, [out,retval] LONG* result);
};

编辑代码

打开FirstClass.cpp,修改代码:

STDMETHODIMP CFirstClass::Add(LONG para1, LONG para2, LONG* result)
{
// TODO: 在此添加实现代码
*result = para1 + para2;
return S_OK;
}

编译代码

注册组件

regsvr32   "D:\FirstCOM\Debug\FirstCOM.dll"

调用COM组件

新建MFC对话框程序,选择类向导、添加类、”类型库中的MFC类“
ATL COM开发学习_开发模式_03
从注册表,选择FirstCOMLib<1.0>