zoukankan      html  css  js  c++  java
  • AFX_MANAGE_STATE(AfxGetStaticModuleState()) 作用

    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 

    AFX_MANAGE_STATE(AfxGetStaticModuleState());//用于模块切换时的状态保护,

    1.AfxGetStaticModuleState()指向当前模块状态;

    2.当前函数调用结束后原模块的状态自动被恢复;

    3.用于DLL中所调用MFC函数、类、资源时的模块状态切换

    AFX_MANAGE_STATE的作用切换到指定的Module State,当出了作用域的时候将Module State恢复到原来的值。是在不同的Module State之中切换,原因有2:

    1.       在不同的MFC DLL和MFC EXE的Module State之间切换,保持正确的AFX_MODULE_STATE,最常见的问题是在DLL输出的函数之中无法获得DLL本身相关的资源,这就是没有正确维护Module State的原因造成的,因为当前Resource DLL的句柄就保存在Module State之中。

    2.       切换Activation Context,不同的Module必然有着不同的Activation Context,需要切换。
    一般的用法如下:

    void SomeMFCDllFunction()

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState())


    注意这里使用的是AfxGetStaticModuleState,而非AfxGetModuleState。原因是在DLL项目中,AfxGetStaticModuleState返回的是DLL本身的Module State,而AfxGetModuleState则是返回当前线程相关的Module State,由于一般DLL输出的函数是被其他Module调用,那么大部分情况下当前线程的Module State都是错误的,所以必须得使用DLL本身的Module State。

  • 相关阅读:
    Centos6.4 cobbler安装要点
    zabbix oracle监控插件orabbix部署安装
    CPP
    基于curl 的zabbix API调用
    oracle 存储过程
    sqlplus乱码
    Intent之对象传递(Parcelable传递对象和对象集合)
    IOS压缩解压缩
    深入浅出java静态代理和动态代理
    c语言用rand() 函数,实现random(int m)
  • 原文地址:https://www.cnblogs.com/rosesmall/p/14845781.html
Copyright © 2011-2022 走看看