afxgetapp()

来源:互联网 发布:阿里云电视系统升级 编辑:程序博客网 时间:2024/04/30 18:06

在exe和dll中进行切换 afxgetapp()这个函数在vc中很常见,主要是用来获的cwinapp生成的全局对象。一般情况是将其强制类型转换成自己写的App类就可以里面的方法。但是如果编写的是dll程序的话,情况会稍有不同。你会发现在dll中调用afxgetapp这个函数实际上得到的是dll应用对象。原因出现在dll模块的状态上。应用程序在调用dll时为了保证资源不出问题。往往会调用一句

AFX_MANAGE_STATE(AfxGetStaticModuleState())

这个宏的作用是切换模块的全局变量的范围,即把应用程序中的全局变量拷贝切换到这个dll的全局变量,自然用afxgetapp得到就是dll中的app了,如果想访问应用程序app对象,那么只要把模块状态切换回去就可以了,不过一定在操作完之后把状态再切换回来。否则要出问题。

 

/// switch thread state back to application

_AFX_THREAD_STATE* pstate=AfxGetThreadState();

 

AfxSetModuleState(pSate->m_pPrevModuleState);

//do something with with the application

AfxGetApp()->...

 

 

//switch thread state back to dll

AFX_MANAGE_STATE(AfxGetStaticModuleState())

 

原创粉丝点击