• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 学习《COM技术内幕》组件聚合遇到一些问题~

学习《COM技术内幕》组件聚合遇到一些问题~

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 学习《COM技术内幕》组件聚合遇到一些问题~等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 学习《COM技术内幕》组件聚合遇到一些问题~
描述:

在学习《COM技术内幕》聚合的程序时,遇到了困难,希望能得到大家的帮助。
为了实现聚合,使用了两个IUnknown接口:
struct IUnknown
{
virtual HRESULT _stdcall QueryInterface(const IID&, void **) = 0;
..
..
};
struct INondelegatingUnknown
{
virtual HRESULT _stdcall NondelegatingQueryInterface(const IID&, void **) = 0;
..
..
};
// 这个两个接口之间有没有什么继承关系?
struct IX:IUnknown
{
virtual void _stdcall Fx() = 0;
};
struct IY:IUnknown
{
virtual void _stdcall Fy() = 0;
};
外部组件
class CA:public IX
{
public:
// IUnknown
virtual HRESULT _stdcall QueryInterface(const IID&, void **)
{
...
...
}
..
..
// IX
virtual void _stdcall Fx();
// 聚合组件CB中的 IY
private:
// 保存内部组件的 Unknown
IUnknown *m_pUnkownInner;
};
内部组件,继承了 IY 和 INondelegatingUnknown
class CB:public IY,public INondelegatingUnknown
{
public:
// IUnknown
virtual HRESULT _stdcall QueryInterface(const IID&, void **);
..
..
// INondelegatingUnknown
virtual HRESULT _stdcall NondelegatingQueryInterface(const IID&, void **);
..
..
// IY 
    virtual void _stdcall Fy();
private:
m_pUnkownOuter;
};
组件CA在初始化的时候,将创建CB,并把CA的this指针传给CB的成员变量m_pUnkownOuter。创建CB后会返回INondelegatingUnknown指针,并传给外部组件CA的成员变量m_pUnkownInner。
为什么在CA中查询IY接口,却使用m_pUnkownInner->QueryInterface(...),
可是INondelegatingUnknown中没有QueryInterface这个成员函数...
另外在程序中出现了这样的转换 ?
reinterpret_cast<IUnknown *>(static_cast<INondelegatingUnknown *>(this))
另外:
在QueryInterface的最后,会出现这样的转换:
reinterpret_cast<IUnknown *>(*ppv)->AddRef();
为什么不用 static_cast 了?


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-06-05 在vc中实现全局数据的共享
  • 2017-06-04 UP有分!请问如何彻底禁止查看网页源码(浏览器为myie或者其他IE内核浏览器)
  • 2017-06-05 js调用C++
  • 2017-06-05 哪位高人指点:怎样得到WinMain的返回值?
  • 2017-06-04 ATL属性页的问题
  • 2017-06-05 怎样调试多线程?
  • 2017-06-05 vs2010MFCCWMPPlayer4类媒体播放
  • 2017-06-04 ole操作word2007菜单
  • 2017-06-05 vs2005与vc6不兼容问题
  • 2017-06-05 ocx中socket掉线问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于COM的重新封装!
    • 高手进,多线程消息队列问题!
    • ocx控件中弹出的对话框中的button按下为什么无响应?
    • WTL,创建窗口时,如何定制窗口背景色?
    • ATL中创建的ActiveX控件,是怎么在程序中使用的????????????
    • ACTIVEX控件
    • link错误
    • 组件实例化问题
    • IE地址栏控件!
    • 如何把ajax插入的HTML代码也写入文件,用MSHTML

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有