• 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

佚名通过本文主要向大家介绍了请教别人问题时应该说,向老师请教问题时说,请教老年人如何壮阳,请教的意思,请教如何选购木地板等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 看com聚合时有些问题请教
描述:

但从概念上偶明白它的实现机制,但看com原理与应用 给出的代码时反而又让我有些糊涂了,请帮忙解惑:
//CB为聚合类,CA为被聚合类,以下仅列出部分代码
HRESULT CB::Init()
{
IUnknown *pUnknownOuter = (IUnknown *)this;
HRESULT result = ::CoCreateInstance(CLSID_CompA, pUnknownOuter, 
CLSCTX_INPROC_SERVER, 
IID_IUnknown, (void **)& m_pUnknownInner) ;
if (FAILED(result))
return E_FAIL;
result = m_pUnknownInner->QueryInterface(IID_SomeInterface, (void **)&m_pSomeInterface); 
if (FAILED(result))
{
m_pUnknownInner->Release();
return E_FAIL;
}
pUnknownOuter->Release();
return S_OK;
}
HRESULT CA::QueryInterface(const IID& iid, void **ppv)
{
if  ( m_pUnknownOuter != NULL )
return m_pUnknownOuter->QueryInterface(iid, ppv);
else
return NondelegationQueryInterface(iid, ppv);
}
HRESULT CA::NondelegationQueryInterface(const IID& iid, void **ppv)
{
if ( iid == IID_IUnknown )
{
*ppv = (INondelegatingUnknown *) this ;
((IUnknown *)(*ppv))->AddRef() ;
} else if ( iid == IID_SomeInterface ) 
{
*ppv = (ISomeInterface *) this ;
((ISomeInterface *)(*ppv))->AddRef() ;
} 
else
{
*ppv = NULL;
return E_NOINTERFACE ;
}
return S_OK;
}
我跟踪了一下代码执行,在CB的init中 m_pUnknownInner->QueryInterface(IID_SomeInterface, (void **)&m_pSomeInterface); 这句居然直接调用到了CA的NondelegationQueryInterface,我非常不明白为什么会这样,为什么不是调用CA::QueryInterface。


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

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

  • 请教一个问题,应该是很普遍把,各位都是怎么解决得
  • Com编译时遇到的问题。请教解决。
  • 请教程序运行时错误
  • 各位高手,请教请教?为什么VC中作一个W32DLL时会这样,为什么呢???
  • 请教:编写DLL时遇到导出的问题。
  • 请教一个DLL卸载时关闭数据库连接问题
  • 请教:调试一个dll时,经常显示一个编译错误,请大家指教一下!
  • 请教:编写DLL时遇到导出的问题。
  • 请教类似QQ那样崩溃时弹出的自己的崩溃提示框是怎么写的。
  • 看com聚合时有些问题请教

相关文章

  • 2017-06-05 求救!!!!!!
  • 2017-06-04 多个进程连接同一个COM+组件的时候,总是弹出COM+Surrogate错误,那位大侠能帮帮忙?
  • 2017-06-04 如何用AsynchronousPluggableProtocol异步可插入协议替换系统http协议的处理--用于网页监控
  • 2017-06-04 ATL中调用ADO插入的问题,在线等待,直到子夜
  • 2017-06-05 98下面能不能用低级键盘钩子?屏蔽win键而且响应esc键来退出程序的死循环。
  • 2017-06-05 我付费开发个简单的bho,寻有经验的高手
  • 2017-06-05 能否给出一个简单的dll制作及其调用的例子(含注释)?
  • 2017-06-04 谁帮个忙,把3DES算法转换成ASP可调用的DLL文件。谢谢·(已有算法源文件)
  • 2017-06-05 一个调用dll时出现的问题
  • 2017-06-05 ActiveX控件,创建Windows子控件

文章分类

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

最近更新的内容

    • 小弟最近找了个用VC编写activex控件嵌入IE中的工作,急需学习activex编程,请大家推荐几本学习的书籍吧
    • c++开发的ocx的问题,超难!
    • 看来真的没ATL高手了,“?ATL高手”的贴子这么长时间,居然没有人回答,惨!!!
    • 关于线程的简单问题!
    • div滚动条事件会触发activex无谓刷新
    • atl制作com编译Win32ReleaseMinDependency出现以下问题求解。
    • 如何得知一个进程已经结束?
    • 请教StereoAPI编译问题
    • 高手进来看看,回复有份
    • 关于进程间消息的问题!!!急急急!!!

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

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