• 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 > 组件聚合的实现问题

组件聚合的实现问题

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

佚名通过本文主要向大家介绍了office组件出现问题,加载小组件时出现问题,生产组件问题,光伏组件质量问题,数学建模组件生产问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 组件聚合的实现问题
描述:

最近在看《COM原理与应用》的聚合部分,其实现过程有一部分不是很理解,希望了解的的同学能给说明一下,谢谢.
HRESULT CA::NondelegationQueryInterface(const IID& iid, void **ppv)
{
if ( iid == IID_IUnknown )
{
*ppv = (INondelegatingUnknown *) this ; 
((IUnknown *)(*ppv))->AddRef() ;    // 这里实际调用的是AddRef还是NondelegatingAddRef?
} else if ( iid == IID_SomeInterface ) 
{
*ppv = (ISomeInterface *) this ;
((ISomeInterface *)(*ppv))->AddRef() ;
} 
else
{
*ppv = NULL;
return E_NOINTERFACE ;
}
return S_OK;
}
说明:CA是被聚合的类。假设还有一个类CB,是用来聚合CA的
按照我的理解,CA和CB的引用计数都是在CB中统计的,但我感觉上面部分的代码(((IUnknown *)(*ppv))->AddRef())调不到CB的AddRef,我试了一下,它实际调用的是CA::NondelegatingAddRef,难道CA和CB的引用计数是各自独立统计的么?这和我对聚合应用计数的理解是有偏差的?
CA的继承结构如下:
class INondelegatingUnknown
{
public:
virtual HRESULT  __stdcall  NondelegationQueryInterface(const IID& iid, void **ppv) = 0 ;
virtual ULONG  __stdcall  NondelegatingAddRef() = 0; 
virtual ULONG  __stdcall  NondelegationRelease() = 0;
};
class CA : public ISomeInterface, public INondelegatingUnknown
{
protected:
     ULONG           m_Ref;
public:
     CA(IUnknown *pUnknownOuter);
     ~CA();
public :
// Delegating IUnknown
virtual HRESULT   __stdcall  QueryInterface(const IID& iid, void **ppv) ;
virtual ULONG   __stdcall  AddRef() ; 
virtual ULONG   __stdcall  Release() ;
// Nondelegating IUnknown
virtual HRESULT   __stdcall  NondelegationQueryInterface(const IID& iid, void **ppv);
virtual ULONG   __stdcall  NondelegatingAddRef();
virtual ULONG   __stdcall  NondelegationRelease();
virtual HRESULT __stdcall SomeFunction( ) ;
private :
IUnknown  *m_pUnknownOuter;  // pointer to outer IUnknown
};
ISomeInterface继承了IUnknown接口。


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

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

  • 关于office自动化问题,紧急!!
  • 关于office自动化问题,紧急!!
  • 自动化组件的问题
  • 急死了,使用adocom组件的一个大问题
  • 关于组件在VB中调用的一个问题
  • 关于加载组件的一个问题,请大家给看看
  • 有关自动化组件无法释放的问题
  • 问一个COM组件的问题
  • 组件聚合问题2
  • 使用远程账户启动远程组件的问题

相关文章

  • 2017-06-05 信号量的问题
  • 2017-06-04 用VC如何插图片到Excel中?400分赠送
  • 2017-06-05 如何让我程序中的一个进程暂停,我想让它恢复的时候再恢复!!!
  • 2017-06-04 初学COM,多日看连接点编程未果,故求助
  • 2017-06-05 VC调用C#的DLL出错比较急,希望大虾们帮忙
  • 2017-06-05 MFCActiveX控件大小菜鸟求助
  • 2017-06-05 多线程对高精度定时器的影响
  • 2017-06-05 问一个问题:在多线程中开多个定时器,最多能开几个?
  • 2017-06-05 请教动态库的调用!
  • 2017-06-04 问一个ATL中调用ADO的问题

文章分类

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

最近更新的内容

    • 关于如何在扩展DLL中建立基于对话框的程序,高手请进!
    • 各位高手请注意:~~~~有一个线程问题需要我们讨论~~~~
    • 为什么两个线程中的对话框会相互影响
    • 麻烦大家进来看看,我都不知道该取个什么题目了,谢谢!
    • 如何用VC的implib为我的DLL生成一个LIB,我在vc中查不到这个工具?
    • 通过IHTMLControlElement在工作者线程里不能取得页面元素的焦点的?
    • 怎么链接手机
    • 利用SendMessage传递字符串的问题
    • 结果通过全局变量保存,这样在多线程环境下存在临界问题?
    • 关于ADO与access数据库连接的问题求教(都研究了八天了)

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

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