一个CWinApp的特殊使用方式
来源:互联网 发布:cnc数控编程模拟软件 编辑:程序博客网 时间:2024/05/07 19:36
今天看了一段老外写的代码,发现老外把一个CFrameWnd派生类的指针直接强转成CWinApp的派生类,然后调用CWinApp派生类的接口去使用,感觉很奇怪,这两个类可以强转吗?第一个想法就是CWinApp的派生类重载了强制转换操作,查了一遍,甚至直接追溯到CCmdObject都没找到重载的强制转换操作。然后想是不是MFC内部将所有强转为CWinApp的地方全部替换成了类似AfxGetApp()的方式去调用,尝试在强转处修改CWinApp中的成员变量,发现修改无效,也就是说只是调用了方法,并没有真正得到全局的WinApp指针。
随后写了一些代码尝试,发现随意定义一个类(从不从MFC派生都没关系)都可以直接强转成CWinApp去调用接口。最后直接去看反汇编,以CWinApp的OnAppAbout()函数为例,发现所有强转调用该接口的地方,反汇编都编译成了CWinApp::OnAppAbout,也就是说直接用的这个函数的地址。
基本可以确认的就是,这种用法在本质上只是编译器做的处理,直接将对CWinApp接口的调用转换为函数地址的调用方式,我估计对于CWinApp来说,他所有的成员函数地址在整个应用程序内部都是公开的(类似于静态函数的方式)。至于无法修改成员变量的问题,是由于CWinApp的成员变量并不是静态的,因此即使调用了接口,但是对内部变量进行了修改是无效的修改。
留下此文做个记号~~~
- 一个CWinApp的特殊使用方式
- Freemarker一些特殊的使用方式
- 管道使用的四种特殊方式
- 蚊子132 学习 CWinThread 的使用及 MFC CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- CWinApp
- 特殊的输入方式
- 在网页中使用特殊字体的几种方式
- 关于CWinApp::OnIdle的解释
- CWinApp的应用与理解
- CWinApp的构造函数(摸索)
- 山底、山顶
- android could not find sdk /tools/adb 解决方法
- 阿桑奇成长经历有感
- VC2008 CMFCRibbonStatusBar显示
- 带提醒功能的重启脚本快捷键
- 一个CWinApp的特殊使用方式
- Vim 的 tab 设置(2): 使用 autocmd 为不同的文件类型应用不同的 tab 设置
- VC2010 设置操作MDI窗体,获得文档视图,设置某个TAB页居最前方
- 字符串类的思考
- WebBrowser使用总结
- 向项目管理方向发展,应该具备怎样的技术水平
- 科学的反义词
- 错误--无法识别的属性“targetFramework” 解决方案
- php中输出变量