• 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 检查失败问题,dr.com常见问题,dr.com问题,com问题,换个角度看问题例子等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM 聚合例子问题
描述:


例子在 COM原理与应用 samples\ch4\aggre  
在这里下载: http://book.yzcc.com/down.asp?id=1577&no=1
A是被B聚合 CompCtrl 是测试程序
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);
......
}
在CB:Init()中,CoCreateInstance创造对象A,得到(INondelegatingUnknown *)类型的指针m_pUnknownInner (见CAFactory::CreateInstance) 。而INondelegatingUnknown 没有继承IUnknown,怎么会有QueryInterface ? m_pUnknownInner->QueryInterface 怎么会调用NondelegatingQueryInterface? 
class INondelegatingUnknown
{
public:
virtual HRESULT  __stdcall  NondelegationQueryInterface(const IID& iid, void **ppv) = 0 ;
virtual ULONG __stdcall  NondelegatingAddRef() = 0; 
virtual ULONG __stdcall  NondelegationRelease() = 0;
};


解决方案1:

画图应该比较清楚,这里大概说明一下:
INondelegatingUnknown -- NondelegationQueryInterface
                      -- NondelegatingAddRef
                      -- NondelegationRelease
IUnknown -- QueryInterface
         -- AddRef
         -- Release
INondelegatingUnknown和IUnknown只有三个纯虚函数,两个类每个函数的偏移量是一致的。
比如访问NondelegatingAddRef或AddRef都是偏移一函数(好像是4个字节,记得不清楚了).
m_pUnknownInner虽然是个INondelegatingUnknown类型,但转换成IUnknown后就有QueryInterface函数了,但实际调用是NondelegationQueryInterface函数。你可以在调试状态下看看程序是调用QueryInterface还是NondelegationQueryInterface。

解决方案2:

虽然函数名不同,但INondelegatingUnknown与IUnknown的内存布局一样。 调用时,只认内存,不认名字。明白了? 如果没有,去看《深入探讨C++对象模型》


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

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

  • COM问题,帮我看看
  • 初次使用COM,有编译链接问题请大家帮忙。
  • com的注册问题
  • 关于COM问题
  • COM注册失败问题
  • 修改COM属性问题
  • 关于COM的参数类型问题
  • 用COM的问题
  • 几个COM的问题,头疼中
  • COM事件,多线程问题?

相关文章

  • 2017-06-04 mediaplayr控件的例子
  • 2017-06-05 求一HOOKAPI的原代码
  • 2017-06-05 为什么总是返回NULL:GetProcAddress()
  • 2017-06-05 怎么在线程中画图?在MDI中。ThreadFunc是CThreadPriorityView的静态成员变量!
  • 2017-06-04 如何使用ATL编写的COM控件来播放AVI文件,需要在IE上使用的
  • 2017-06-05 如何测定一个算法所花的时间?
  • 2017-06-05 ???为什么我在线程中不能调用ActiveX控件的方法。
  • 2017-06-05 MFC与TEECHART控件文字曲线在同一页面上打印的问题
  • 2017-06-04 COM口读不到数据呀?代码没有问题呀
  • 2017-06-05 VC在EXCEL中画出的图形如何组合一起

文章分类

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

最近更新的内容

    • 组件和控件是一个东西吗???ActiveX算哪类??如何把我写好的MFC程序做成一个ActiveX呢???
    • 请教高手如何模拟在网页中按下按钮
    • 没人帮我解决我就跳楼了
    • 把程序从WinXP移植到Windows7上面。发现了一个heapcorruption问题
    • 大家一起来讨论---如何做一个后台进程,能随时监控电脑,还不能被杀!!!!
    • ————在线等,请问如何使用SendMessage或PostMessage发送自定义的消息???
    • 如何提取CComBSTR中的字符?
    • activeX控件手工添加属性需要更新哪几个文件
    • 纯com组件(非activex)能否用在网页里进行加载?
    • 请问大家,如何检测当前的事件EVENT的状态是有信号还是无信号,好象没什么函数

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

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