• 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中的QueryInerface函数中为何要使用一个指向指针的指针?

COM中的QueryInerface函数中为何要使用一个指向指针的指针?

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

佚名通过本文主要向大家介绍了com error无效指针,指向函数的指针,指向函数的指针变量,c语言指向函数的指针,指向函数的指针数组等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM中的QueryInerface函数中为何要使用一个指向指针的指针?
描述:


HRESULT _stdcall CA::QueryInterface(const IID& id,void** ppv)
{
if(id == IID_IUnknown)
{
trace("QueryInterface:Return pointer to IUnknown.");
*ppv = static_cast<IX*>(this);
}
else if(id == IID_IX)
{
trace("QueryInterface:Return pointer to IX.");
*ppv = static_cast<IX*>(this);
}
else
{
trace("QueryInterface:Interface not supported.");
*ppv = NULL;
return E_NOINTERFACE;
}
reinterpret_cast<IUnknown*>(*ppv)->AddRef();
return S_OK;
}
ppv 定义成指针不行吗,为何要用一个指向指针的指针??  再就是reinterpret_cast与
static_cast有何区别??


解决方案1:

1.看看COM的原理和发展史,就知道为什么了
2.STATIC_CAST VERSUS REINTERPRET_CAST 
static_cast 和 reinterpret_cast 操作符修改了操作数类型. 它们不是互逆的; static_cast 在编译时使用类型信息执行转换, 在转换执行必要的检测(诸如指针越界计算, 类型检查). 其操作数相对是安全的. 另一方面, reinterpret_cast 仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换, 例子如下:
    int n=9; double d=static_cast < double > (n); 
上面的例子中, 我们将一个变量从 int 转换到 double. 这些类型的二进制表达式是不同的. 要将整数 9 转换到 双精度整数 9, static_cast 需要正确地为双精度整数 d 补足比特位. 其结果为 9.0. reinterpret_cast 的行为却不同: 
    int n=9;
    double d=reinterpret_cast<double & > (n); 
这次, 结果有所不同. 在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析. 
因此, 你需要谨慎使用 reinterpret_cast. 

解决方案2:

1、因为需要返回的是指针,所以传送需使用指针的指针。
2、MSDN


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

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

  • com和客户之间是否可以传输函数指针?
  • COM中关于对象指针的传递
  • 关于COM中的指针问题
  • 在COM编程中,关于_com_error和ErrorsPtr的区别,急啊,救命啊
  • COM中指针的传递
  • com中使用主框架指针的问题
  • com中指针定义
  • 怎么等到已经创建的com服务实例的指针
  • 《COM技术内幕》指针类型转换
  • 关于COM智能指针的问题

相关文章

  • 2017-06-04 请问各位高手,为什么我不能用ACTIVEX
  • 2017-06-05 我想使用SendMessage/PostMessage给另一个进程发送一个Struct过去,怎么做?
  • 2017-06-04 VC和matlab混合编程matcom的问题
  • 2017-06-05 ocx的证书问题
  • 2017-06-05 关于Advise应用
  • 2017-06-05 如何取得指定文件的导入导出函数呢?
  • 2017-06-05 对话框程序,用createthread创建一个线程,在该线程里要用到对话框类的成员变量以及UpdateData函数,该如何实现?
  • 2017-06-05 怎么释放com组件
  • 2017-06-04 接口实现了IObjectWithSite后,无法在VBScript脚本中创造对象的疑问
  • 2017-06-05 标准C里有开线程的函数吗?

文章分类

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

最近更新的内容

    • 关于引用计数
    • WTLTabBrowser表单自动完成导致浏览器崩溃
    • vc重装后,以前程序的activex不能用了,超郁闷,超难?
    • 如何绘制IWebBrowser2内容到窗口DC上,并能够操作网页
    • 最新CAX/EDA/CFD/GIS/光学/化工/液压软件资源网
    • 请教一下谁用过这个线程池
    • 关于DLL中导出MFC继承类的问题
    • 请高手指点:DLL如何显示对话框?
    • WNetAddConnection2,多线程,加上暴力破解Administrator的密码遇到的问题,有兴趣的来看!
    • 关于asp调用vc编写的一个简单com,出错问题向各位大虾请教

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

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