zoukankan      html  css  js  c++  java
  • COM编程 笔记2

    COM 包容与聚合

    在聚合中,聚合的对象应该包含两个IUnknown,一个委托Iunknown,另外一个非委托IUnknown,由于C++不支持同时实现两个IUnknown,

    故非委托IUnknown 可以定义如下:

    class INondelegationUnknown //命名由自己决定

    而委托IUnknown本身不做任何操作,只是判断对象是否被聚合,如果被聚合,则将m_pUnknownOuter(定义的IUnknown接口指针对象)指向外

    部对象的IUnknown接口;如果没有被聚合,m_pUnknownOuter为NULL,则委托IUnknown把调用传给非委托IUnknown的相应函数。

    Win32 SDK 中与COM接口有关的一些宏的说明:

    DECLARE_INTERFACE(iface) //声明接口iface,它不从其他的接口派生

    DECLARE_INTERFACE_(iface,baseiface) //声明接口iface,它从接口baseiface派生

    STDMETHOD(method) //声明接口成员函数method,函数返回类型为HRESULT

    STDMETHOD_(type,method) //声明接口成员函数method,函数返回类型为type

    MFC对COM应用的支持

    1. 用嵌套类实现COM接口

    2. 接口映射表

      (1)在 CCmdTarget类和其派生类定义中使用宏DECLARE_INTERFACE_MAP()声明接口映射表使用的一些静态成员函数以及两个成员函数;

      (2)在类的实现部分使用BEGIN_INTERFACE_MAP(theClass,theBase)

            INTERFACE_PART(theClass,iid,localClass) //定义每一个接口项

            END_INTERFACE_MAP() 来定义接口映射表;

      (3)定义完接口映射表后,我们接着为每个接口定义嵌套类成员,采用BEGIN_INTERFACE_PART、 INIT_INTERFACE_PART、

        END_INTERFACE_PART封装嵌套类;

      (4)实现嵌套类。

    3. 类厂定义由宏DECLARE_OLECREATE(class_name)完成

      然后在COM对象实现时,指定类厂和guid的值,MFC使用宏IMPLEMENT_OLECREATE(class_name,external_name,1,w1,w2,b1,b2,b3,b4,

    b5,b6,b7,b8);

      

  • 相关阅读:
    springboot+https+http
    3.kettle-定时执行任务
    sqlserver清空删除日志
    C++学习(二)
    随笔(二) 安装Code::Blocks遇到的问题
    随笔(一) tensorflow环境的搭建
    C++学习(一)
    前端学习日记 (三)
    前端学习日记 (二)
    前端学习日记 (一)
  • 原文地址:https://www.cnblogs.com/pbreak/p/1755710.html
Copyright © 2011-2022 走看看