美文网首页
ATL COM模板生成项目文件解读

ATL COM模板生成项目文件解读

作者: Charles_linzc | 来源:发表于2021-10-20 12:35 被阅读0次

使用visual studio 2019 ATL模板创建的COM项目,在不同阶段包含的内容:

  1. 项目创建阶段,使用ATL模板完成vcamera项目的创建:
    1.1 源文件
    dllmain.cpp dll项目入口C++类
    pch.cpp ATL项目预编译时需要的,无需关心
    vcamera.cpp vcamera组件类,包含了COM组件注册、移除注册、dll卸载,和获取COM对象方法。
    vcamera.def COM组件定义描述文件,
    vcamera.idl COM组件IDL语言描述文件
    这里可以看到,对于vcamera.def 已经包含了所有外部可以调用的函数定义,这些方法将被用于客户端、COM库、操作系统实现COM组件的基础查询、生命周期管理的功能。


    image.png

    而vcamera.idl 仅包含的COM lib的描述已经LIBID的定义。


    image.png

1.2 头文件
dllmain.h 生命所有dllmain中需要的类的头文件。
framework.h 定义了ATL模板需要的一些声明。
pch.h 预编译时需要
resource.h vc++ 为项目生成的定义文件
targetver.h 定义可用的最高版本的Windows平台

1.3 生成的文件
vcamera_i.c IID, CLSID等定义文件,此阶段为空


image.png

vcamera_i.h 接口定义文件,在此阶段为空


image.png
  1. 创建一个简单COM对象VCameraObject后:
    2.1源文件
    VCameraObject.cpp VCameraObject COM对象的C++文件,当前还未生成代码。

vcamera.idl COM组件IDL语言描述文件,此阶段包含了COM类定义和接口定义:
从下图可以看到,创建了一个coclass类型的com对象VCameraObject, 它包含一个接口:IVCameraObject; 也就是说使用ATL模板在生成简单COM对象的时候会自动默认生成一个COM接口,且当前接口的内容为空:

image.png
2.2 头文件
VCameraOjbect.h COM对象 VCameraOjbect的头文件,可以看到它需要继承三个重要的类或接口,其中IVCameraObject 为COM接口。
class ATL_NO_VTABLE CVCameraObject :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CVCameraObject, &CLSID_VCameraObject>,
public IVCameraObject
  1. 为COM接口创建fillbuffer方法,
    3.1源文件
    vcamera.idl com描述文件,此时新增了新的接口方法的描述


    image.png

    VCameraObject COM对象实现的C++文件,此时新增了 fillBuffer的实现


    image.png

3.2 头文件
VCameraObject.h COM对象的头文件,测试新增了新的公共方法 fillbuffer:


image.png
  1. 编译项目后
    4.1 头文件
    vcamera_i.h 增加了COM对象与接口的c/c++定义


    image.png

vcamera_i.c 增加了IID, CLSID 等结构的定义,以及对应的vcameraObject 的声明:


image.png

也就是说通过编译,项目将生成COM相关的内容:

  1. CLID, IID, LIBID等结构体,并未COM组件的库,对象,接口创建按个实例方便代码中引用 IID_IVCameraObject, LIBID_vcameraLib,CLSID_VCameraObject
  2. 为vcamera 声明适合于C和c++的接口,对象,和CLID,IID常量。这个文件将被客户端引用作为连接COM服务器和调用服务器方法使用。

除了以上文件外,ATL项目还同生生成了一些资源文件:
vamera.rc 资源文件用于注册表
vcamera.rgs 注册脚本文件,默认为空
VCameraObject.rgs 项目的实际注册脚本文件


image.png

生成解决方案成功后,可以在注册表中找到对应的信息:
HKEY_CLASSS_ROOT\vcamera.VCameraObject[.1]


image.png

相对于直接写com程序,ATL已经将很多逻辑封装了起来,不在用关心接口查询,GUID生成,生命周期管理等,只需要专注于业务接口。

相关文章

网友评论

      本文标题:ATL COM模板生成项目文件解读

      本文链接:https://www.haomeiwen.com/subject/bleaoltx.html