博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
接口内存模型
阅读量:4204 次
发布时间:2019-05-26

本文共 1052 字,大约阅读时间需要 3 分钟。

《COM原理与应用》笔记

  COM对象往往有自己的属性数据,这些属性数据反映了对象的状态,正是通过这些属性数据,反映了此对象与彼对象的不同。例如,字典对象有一个字典数据表m_pData成员和字典文件名m_DictFilename作为其基本的属性数据。用C++语言来实现字典对象:

  class CDictionary : public IDictionary
  {
  public:
    CDictionary();
    ~CDictionary();
    virtual BOOL Initialize();
    virtual BOOL LoadLibrary(String);
    virtual BOOL InsertWord(String, String);
    virtual void DeleteWord(String);
    virtual BOOL LookupWord(String, String *);
    virtual BOOL RestoreLibrary(String);
    virtual void FreeLibrary();
  private:
    struct DictWord *m_pData;
    char *m_DictFilename[128];
  };
  按照类CDictionary的定义,接口IDictionary和字典对象的内存结构变成图2.4。

 

  如果一个客户使用了两个字典对象,则显然两个字典对象公用了成员函数,但数据属性是不能公用的,根据C++中class的基本编译原理,这时内存结构如图2.5所示。

 

  如果第二个字典组件对象没有采用CDictionary类的结构来实现其字典功能,但也实现了IDictionary接口,则此时内存结构与图2.5又有所不同,如图2.6所示。

 

  以上给出的三个模型图中,每个接口成员函数都包含一个this指针,通过该this指针,接口成员函数可以访问到字典对象的属性数据。按照CDictionary的定义方法,该this指针指向CDictionary类的对象,因此,在虚函数中可以直接访问CDictionary的数据成员。

  实际上,也可以采用其他的方法来实现接口,只要接口成员函数中this指针(接口指针)与对象数据能建立确定的连接,在接口成员函数中可以访问到对象数据即可。例如MFC和ATL分别采用了不同的机制来提供对COM接口的支持。

 

转载地址:http://ypsli.baihongyu.com/

你可能感兴趣的文章
ebay api - GetUserDisputes 函数
查看>>
ebay api GetMyMessages 函数
查看>>
wdlinux
查看>>
关于mysql升级到5.5报错问题
查看>>
magento - 通过storeid,分类id,天数(几天内)得到产品
查看>>
一个很不错的bash脚本编写教程,至少没接触过BASH的也能看懂!
查看>>
Redis和Memcache对比及选择
查看>>
用谷歌账号登陆magento、
查看>>
php oauth 模块在linux下安装
查看>>
代替nginx的服务器 - The Tengine Web Server
查看>>
nginx 升级成 tengine 的代码
查看>>
magento rest api 调用
查看>>
magento rest api 调用!
查看>>
magento rest api get Token key and secret
查看>>
谷歌获取货币汇率代码
查看>>
安装nginx
查看>>
手动6 - 隐藏Nginx版本号
查看>>
手动7 - nginx 日志切割
查看>>
magento - 使用后台设置的时间用法
查看>>
Linux常用命令
查看>>