• 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 > QueryInterface问题

QueryInterface问题

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

佚名通过本文主要向大家介绍了queryinterface,queryinterface失败,src queryinterface,问题儿童都来自异世界,保利楼盘曝质量问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: QueryInterface问题
描述:

COM进程外服务器实现 QueryInterface时,这样的代码为什么不行?
HRESULT QueryInterface( REFIID riid, void **ppv)
{
                .....
                if( riid == MYIID1 || riid== MYIID2 .... )  {   /// MYIIDX 
是该对象实现的接口
                        *ppv= this;   ////1
                }
                .....
}
客户QueryInterface成功后却无法调用MYIIDX的方法。
这样写才可以:
HRESULT QueryInterface( REFIID riid, void **ppv)
{
                .....
                if( riid == MYIID1  ) {
                        *ppv= (MY_IID1*) this;
                } else  if( riid == MYIID2  ) {
                        *ppv= (MY_IID2*) this;
                }
                .....
}
 (MY_IIDX*) this,这个转换到底起什么作用呢?我试了一下,如果不是COM,
在一个程序内是没有什么作用的。


解决方案1:

其实我不建议你使用
(MY_IIDX*) this
而应当使用
static_cast<MY_IIDX*>(this)

解决方案2:

顺带一提:
不过你用 reinterpret_cast 就是同你心目中想的是一样的了。
所以很多书上说 reinterpret_cast 要谨用。

解决方案3:

struct A{ virtual Haha(){} };
struct B : public A {};
struct C : public A {};
struct D : public B , public C {};
int main()
{
     D* value = new D();
     cout << (int)(B*)(value) << endl;
     cout << (int)(C*)(value) << endl;
 return 0;
}

解决方案4:

(MY_IIDX*) this 的作用就是把本对象指针转换为MY_IIDX类型的对象指针,其中涉及到c++多重继承的布局结构,可以看一下《深度探索c++对象模型》这本书。


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

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

  • 如何修改ATL自动生成的COM方法呢?比如QueryInterface,CreateInstence
  • 重写QueryInterface,AddRef,Release应该注意些什么?我这段代码怎么总是有问题。
  • 使用COM组件时,QueryInterface调用失败是什么原因
  • tempRs->QueryInterface__uuidof_Recordset,voidm_Recordset编译没错,vb调用报自动化错误
  • 在线等待关于queryinterface的问题
  • 关于QueryInterface,求助啊!
  • 奇怪:成功激活也能成功调用,为什么queryinterface查询第二个接口报告“拒绝访问”?
  • 为什么Queryinterface返回的IUnknown指针总是相同的
  • 求QueryInterface例子
  • 请问QueryInterface有什么用呢?

相关文章

  • 2017-06-05 编译StereoAPI
  • 2017-06-05 见笑了,如何调用ocx中的函数
  • 2017-06-04 我刚开始学COM,请问哪里有比较完善的学习教程
  • 2017-06-04 COM原理与应用第3章
  • 2017-06-04 有CString如何转换到char,
  • 2017-06-04 请教:vc6开发plugin
  • 2017-06-04 在无MFC支持或serviceexe类型的COM组件里,如何获得当前系统IP地址?
  • 2017-06-05 只要线程之间没有对全局的数据进行操作就不用同步了
  • 2017-06-05 怎样在程序中开始一个可执行程序的进程,同时可以任意中断这个进程,最好有源代码!
  • 2017-06-04 使用OLEVIEWER打开某些COM的DLL,显示800401E6错误

文章分类

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

最近更新的内容

    • 如何在Dll中导出类???
    • 求教关于DLL中caseDLL_PROCESS_DETACH:的问题?
    • 高手请教:有关辅助线程和MFC静态库
    • 三个线程之间通信的问题
    • vc做的COM怎样在net(c#)里用呢
    • ActiveX控件自动下载并注册的问题
    • 用ATL写ActiveX控件,这种程序这么调啊?
    • GUID转换成字符串,和把字符串转换成GUID的函数是什么来着?
    • CoMarshalInterThreadInterfaceInStream只能用于实现了IDispatch的组件?
    • 关于DLL调用DLL

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

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