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);

      

  • 相关阅读:
    Java实现蓝桥杯模拟组织晚会
    Java实现蓝桥杯模拟组织晚会
    ffmpeg+rtsp+dss
    开发ffmpeg/live555常见问题错误及解决方法
    SxsTrace工具使用方法
    移植strace调试工具到arm平台
    Linux on Power 上的调试工具和技术
    使用 Strace 和 GDB 调试工具的乐趣
    自助Linux之问题诊断工具strace
    通用Makefile
  • 原文地址:https://www.cnblogs.com/pbreak/p/1755710.html
Copyright © 2011-2022 走看看