• 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 > 请教关于虚表与接口的问题

请教关于虚表与接口的问题

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

佚名通过本文主要向大家介绍了请教关于葫芦的形状,关于请教的名言,关于请教大师的笑话,关于请教的成语,关于虚心请教的名言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请教关于虚表与接口的问题
描述:

class  IUnKown    
{  
public:  
           virtual  void  add(){}  
           virtual  void  release(){}  
           void  test(){}  
};  
 
class  IUnKown2  
{  
public:  
           virtual  void  add2(){}  
           virtual  void  release2(){}  
           virtual  void  test2(){}  
 
};  
                                                                                     
class  testIunkown  :  public  IUnKown  
{  
public:  
           virtual  void  add(){}  
           virtual  void  release(){}  
};  
 
class  TestInterface  :  public  testIunkown,  public  IUnKown2  
{  
public:  
           virtual  void  add(){}  
           virtual  void  release(){}  
           virtual  void  add2(){}  
           virtual  void  release2(){}  
           virtual  void  test2(){}  
};  
 
int  main(int  argc,  char*  argv[])  
{  
       TestInterface*    ptest  =  new  TestInterface;//1  
       IUnKown2  *p  =  (IUnKown2  *)ptest;//2  
       ((IUnKown2*)p)->test2();//3  
       delete  ptest;//4  
       return  0;//5  
}  
 
vc6下运行,通过  
 
 
反汇编看第3句  
43:              IUnKown2  *p  =  (IUnKown2  *)ptest;  
0040111E      cmp                  dword  ptr  [ebp-10h],0  
00401122      je                    main+7Fh  (0040112f)  
00401124      mov                  edx,dword  ptr  [ebp-10h]  
00401127      add                  edx,4  
0040112A      mov                  dword  ptr  [ebp-28h],edx  
0040112D      jmp                  main+86h  (00401136)  
0040112F      mov                  dword  ptr  [ebp-28h],0//这两  
00401136      mov                  eax,dword  ptr  [ebp-28h]//句  
00401139      mov                  dword  ptr  [ebp-14h],eax  
 
以下两句我很奇怪,0给了这个地址,为什么下一句又把内容给eax,这时eax应该是指向IUnKown2的vptr的,而且看寄存器结果也是对的,不应该是0吗?  
0040112F      mov                  dword  ptr  [ebp-28h],0  
00401136      mov                  eax,dword  ptr  [ebp-28h]  
 
如果我程序是这样写  
int  main(int  argc,  char*  argv[])  
{  
    TestInterface*  ptest = new TestInterface;
    void *p = (void *)ptest;
    ((IUnKown2*)p)->test2();
    ((IUnKown*)p)->release();
    delete ptest;
    return 0;
}  
 
查看反汇编  
49:              ((IUnKown2*)p)->test2();  
00401124      mov                  eax,dword  ptr  [ebp-14h]  
00401127      mov                  edx,dword  ptr  [eax]  
00401129      mov                  esi,esp  
0040112B      mov                  ecx,dword  ptr&nb

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

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

  • 请教关于CriticalSection
  • 请教关于安全描述符的问题!
  • 请教关于dll的使用
  • 请教关于键盘钩子的问题
  • 请教,关于驱动程序里面读取磁盘文件的错误。
  • 请教关于CMFCMenuBar子菜单如何禁用或变灰处理
  • 请教关于vs2010连接mysql数据库问题
  • 请教:关于资源管理
  • 请教关于IE浏览器ToolBandCom程序问题?
  • 请教关于虚表与接口的问题

相关文章

  • 2017-06-04 ACTIVEX开发中碰到的一些问题,求救关键字xp风格无模态对话框内存释放
  • 2017-06-04 容器程序中嵌入OfficeWord对象退出时的问题?
  • 2017-06-05 怎样获取进程地址
  • 2017-06-04 关于MSHFlexGrid控件的疑问!!!!
  • 2017-06-05 线程计时一问
  • 2017-06-04 使用MSCOMM做串口通信的数据接收问题
  • 2017-06-04 请问,如何不用ATL和MFC等这些类库实现一个ActiveX的容器?
  • 2017-06-04 如何获取网页js脚本里input的变量值?
  • 2017-06-04 江湖救急,ActiveX元件無法產生物件
  • 2017-06-04 如何用程序向Word中插入一段公式(象公式编辑器一样)?

文章分类

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

最近更新的内容

    • WIN7下窗口的左窗口是用的什么接口?IShellView?
    • dll注入进程为什么不行?
    • debug版exe调release版dll库的一个问题
    • 引入ATLCOM生成的Toolsdll时Toolstlh报错
    • 利用dom解析xml时,识别中文吗?
    • 在windows的explorer中,选中右边的ppt文件,左边就会预览一下
    • 求救,为什么LoadLibrary调用dll出现0x000003e6错误?
    • 为什么说C#开发COM组件多余
    • 请问哪里有《OLE技术内幕》中文版下载??
    • 如何设置CreateProcess函数中的环境参数

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

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