• 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,疑惑多多,都是基础问题请大家不吝赐教!100分酬谢

初学com,疑惑多多,都是基础问题请大家不吝赐教!100分酬谢

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

佚名通过本文主要向大家介绍了不吝赐教,不吝赐教是什么意思,不吝赐教的意思,不吝赐教的近义词,不吝赐教造句等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 初学com,疑惑多多,都是基础问题请大家不吝赐教!100分酬谢
描述:

问题1:
我在看com原理与应用的第四张,关于聚合书上源程序是这样
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;
}
哥哥们看*******************************局书上说在请求ISomeInterface接口时外部对象引用记数加一而不是内部对象的引用对象加一,所以创建完要用外部对象release恢复引用记数,
我晕的是m_pUnknownInner获得是内部对象呀!怎么书上书上说在请求ISomeInterface接口时外部对象引用记数加一而不是内部对象的引用对象加一
pUnknownOuter->Release();这局更是晕!
2。我知道dll是封装com的一个容器,可我怎么把我的com程序作成dll的形式呢?书上给的例程都是已经作成dll形式了,它讲的vc++开发和ATL又很简单,我看了半天也没看个所以然来。还望那位大哥赐教!小弟笑脸奉上100分酬谢!


解决方案1:

上面那段代码的意思大致是这样的:
CB是外部组件的实现类,在被new出来之后,类厂会调用其Init函数,以给他一个初始化的机会。CB把自己的指针传给内部组件表示希望聚合,如果成功,则CB还会查询它希望聚合的接口是否存在,也就是:
result = m_pUnknownInner->QueryInterface(IID_SomeInterface, (void **)&m_pSomeInterface);*******************************
这个调用将会导致内部组件的一个AddRef调用,但实际上这个AddRef被转发给了外部组件,所以,后面的代码会在不成功时释放内部组件,而在成功时调用自己的Release以减少这个多出来的计数。这个Release是必需的,否则外部组件的引用计数就再也不会为0了。
仔细看一看内部组件的实现是如何来支持聚合的就明白了。


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

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

  • 关于获取Windows消息问题,请赐教!!!在线等待
  • 推荐几本好的ATL入门的书籍,由浅到深的,望不吝赐教
  • 关于Hook到Word函数的问题有点难度,请救急,PM在催了!!!请蒋晟不吝赐教!!
  • 如何编写基于文档/视图结构的ActiveX控件?请高手们不吝赐教,谢谢了
  • 望高手们不吝赐教ocx播放器
  • 我想要BasicExcel_srczip和BasicExcel_demo,请赐教
  • 有关读写串口的问题,请各位赐教!
  • 如何在自己的窗扣内载入并且显示一个ppt文件内容??谢谢赐教!
  • 在线求问一个串口收发的问题,小弟分少,望大侠不吝赐教!
  • ATL复合控件上的Static控件,如何改变背景色。。。没分了。。。希望大家不吝赐教

相关文章

  • 2017-06-04 用MFC开发的ACTIVEX控件,怎样取得本控件所在的IE窗口的句柄。从而使这个IE窗口从最小化形式变成最大化形式。
  • 2017-06-04 如何传递一个结构体从VCCOM组件-〉NETVB程序???
  • 2017-06-05 请问如何得到带参数的多项式相乘的结果?
  • 2017-06-04 多个文件上传的组件!
  • 2017-06-04 求教!编写Office插件时,LoadBehavior值会被改变成2
  • 2017-06-04 ActiveXrelease版本问题
  • 2017-06-04 如何将Word文档的内容显示到指定的窗口中
  • 2017-06-05 打印初级问题,见者有分,对不起基础类我进不去!
  • 2017-06-04 一个关于ATLConnectionPoint机制中COM接口类型转换的问题
  • 2017-06-05 100分求大侠帮忙,线程同步是怎么实现的阿

文章分类

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

最近更新的内容

    • IHTMLImgElement无法使用的问题
    • Activex控件开发,高手请进
    • 我公司想在上海租机柜。有熟悉该业务的朋友吗?
    • OLE操作EXCEL问题
    • IShellIconOverlayIdentifier求助
    • 16位DLL
    • COM組件替換實現
    • 2010下CrystalReport问题
    • ATL遍历文件夹
    • 这是什么错误?

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

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