首页
社区
课程
招聘
[讨论]关于深入浅出MFC中仿真获取App指针的一个问题。
发表于: 2013-6-18 12:29 4886

[讨论]关于深入浅出MFC中仿真获取App指针的一个问题。

2013-6-18 12:29
4886
MFC.CPP
#0002
#0003  extern CMyWinApp theApp;
#0004
#0005  CWinApp* AfxGetApp()
#0006  {
#0007    return theApp.m_pCurrentWinApp;
#0008  }
#0001 #include "my.h" // 原本包含mfc.h 就好,但为了CMyWinApp 的定义,所以...

MY.CPP
#0001  #include "my.h"
#0002
#0003  CMyWinApp theApp;  // global object
#0004
#0005  //---------------------------------------------------------------
#0006  // main
#0007  //---------------------------------------------------------------
#0008  void main()
#0009  {
#0010
#0011    CWinApp* pApp = AfxGetApp();
#0012
#0013  }

以上是Frame1中用来获取theApp指针的方法。
我的问题是为什么Main函数中绕了个弯子调用AfxGetApp();来获取theApp指针。
用以下的代码不就可以了吗?
#0006  // main
#0007  //---------------------------------------------------------------
#0008  void main()
#0009  {
#0010
#0011    CWinApp* pApp =theApp.m_pCurrentWinApp
#0012
#0013  }
请知道的大哥解释下,谢谢了

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1501
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
theApp虽然是global修饰的,但是若theApp的内部成员m_pCurrentWinApp不想对外公开m_pCurrentWinApp这个成员自身在内存中的地址(不准外人修改内部的成员值),就不能在别的类中直接访问这个成员。【类似于我的隐私可以跟你分享,但是我不想你能修改我的记忆】

在写程序时,考虑到外部类B要读取A中某个成员的值(这个值可以是某个地址,本例中这个m_pCurrentWinApp可能是某WINAPP在内存中的地址,但是绝对不是m_pCurrentWinApp自己在内存中的地址)参与B自己的计算,程序员会考虑在A类的内部提供一个方法来返回该值(如果告诉值本身在内存中地址,就表示可以任意篡改内部成员的信息了),详情参阅堆栈的工作原理。【类似于,你在冰箱里放的东西你拿起来最方便,你叫别人来拿他们可能翻来翻去也找不到】

如果类A,要定制上述这样的一个规则(允许读值,不许改自身),那么其中一个解决方法就是使用theApp内部的AfxGetApp函数来返回m_pCurrentWinApp成员。
如果类A在设计上被定义成允许对外公开自己的成员m_pCurrentWinApp(可读可写),那么你所说的直接获取也是可以的。

我是这么理解的,可能有误区。希望大家一起讨论。
2013-6-18 14:14
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我感觉你说的有道理,我就按你的思路理解了,谢谢
2013-6-19 20:42
0
游客
登录 | 注册 方可回帖
返回
//