青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

技術(shù)著執(zhí)著
技術(shù)人士
AFX_MANAGE_STATE(AfxGetStaticModuleState())
 

先看一個例子:

1、創(chuàng)建一個動態(tài)鏈接到MFC DLL的規(guī)則DLL,其內(nèi)部包含一個對話框資源。指定該對話框ID如下:
              #define IDD_DLL_DIALOG 2000

2、創(chuàng)建一個基于對話框的mfc應(yīng)用程序,它包含兩個對話框資源,IDD_UI_DIALOG和IDD_EXE_DIALOG。并將后者的ID指定如下:
              #define IDD_EXE_DIALOG 2000
其中前者是這個應(yīng)用程序的用戶界面,單擊上面的按鈕,將彈出一個對話框。部分代碼如下:
// in DLL
void CDLL::ShowDlg(void)
{
       CDialog dlg(IDD_DLL_DIALOG); //打開ID為2000的對話框
       dlg.DoModal();
}
// in EXE
void CEXE::OnButtonClick()
{
       ShowDlg();
}

3、單擊按鈕,彈出的不是期望的DLL中的對話框IDD_DLL_DIALOG,而是應(yīng)用程序中的對話框IDD_EXE_DIALOG。

解釋:

1、應(yīng)用程序進程本身及其調(diào)用的每個DLL模塊都具有一個全局唯一的HINSTANCE句柄,它們代表了EXE或DLL模塊在進程虛擬空間中的起始地址。(進程本身的模塊句柄一般為0x400000,而DLL模塊的缺省句柄為0x10000000。如果程序同時加載了多個DLL,則每個DLL模塊都會有不同的HINSTANCE。應(yīng)用程序在加載DLL時對其進行了重定位)。
2、共享MFC DLL(或MFC擴展DLL)的規(guī)則DLL涉及到HINSTANCE句柄問題,HINSTANCE句柄對于加載資源特別重要。EXE和DLL都有其自己的資源,而且這些資源的ID可能重復(fù),如果應(yīng)用程序與規(guī)則DLL共享MFC DLL(或MFC擴展DLL),那么將總是默認使用EXE的資源
3、因此應(yīng)用程序需要通過資源模塊的切換來找到正確的資源。如果應(yīng)用程序需要來自于DLL的資源,就應(yīng)將資源模塊句柄指定為DLL的模塊句柄;如果需要EXE文件中包含的資源,就應(yīng)將資源模塊句柄指定為EXE的模塊句柄。

解決辦法:

1、在DLL中改進:

方法1。

// in DLL
void CDLL::ShowDlg(void)
{
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
       CDialog dlg(IDD_DLL_DIALOG); //打開ID為2000的對話框
       dlg.DoModal();
}

注:AFX_MANAGE_STATE(AfxGetStaticModuleState());一定是作為接口函數(shù)的第一條語句。
       其功能是在棧上(這意味著其作用域是局部的)創(chuàng)建一個AFX_MODULE_STATE類的實例,并將其指   針pModuleState返回。
       AFX_MODULE_STATE類利用其構(gòu)造函數(shù)和析構(gòu)函數(shù)進行存儲模塊狀態(tài)現(xiàn)場及恢復(fù)現(xiàn)場的工作。
       該宏用于將pModuleState設(shè)置為當前的有效模塊狀態(tài)。當離開該宏的作用域時(也就離開了pModuleState所指棧上對象的作用域),先前的模塊狀態(tài)將由類AFX_MODULE_STATE的析構(gòu)函數(shù)恢復(fù)。(即自動恢復(fù))

方法2。

// in DLL
void CDLL::ShowDlg(void)
{
       HINSTANCE save_hInstance = AfxGetResourceHandle();
       AfxSetResourceHandle(theApp.m_hInstance);
       CDialog dlg(IDD_DLL_DIALOG); //打開ID為2000的對話框
       dlg.DoModal();
       AfxSetResourceHandle(save_hInstance);    
}

注:AfxGetResourceHandle:獲取當前資源模塊句柄;AfxSetResourceHandle:設(shè)置程序目前要使用的資源模塊句柄。
       同方法1比較,方法2能夠靈活地設(shè)置程序的資源模塊句柄,而方法1則只能在DLL接口函數(shù)退出的時候才會恢復(fù)模塊句柄。

2、在應(yīng)用程序中改進:

// in EXE
void CEXE::OnButtonClick()
{
       HINSTANCE exe_hInstance = GetModuleHandle(NULL);
      HINSTANCE dll_hInstance = GetModuleHandle("SharedDll.dll");
      AfxSetResourceHandle(dll_hInstance); //切換狀態(tài)
       ShowDlg();
      AfxSetResourceHandle(exe_hInstance); //恢復(fù)狀態(tài)
}

注:使用狀態(tài)切換的情況:當DLL導出函數(shù)包含MFC資源、類或者需要創(chuàng)建窗口時。

track: http://tech.163.com/06/0316/10/2CB1FGNG0009159F_4.html
轉(zhuǎn)自

http://blog.sina.com.cn/s/blog_62bb83b10100jbdj.html

posted on 2013-03-22 14:58 zhangmo 閱讀(2739) 評論(0)  編輯 收藏 引用
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狠狠爱成人网| 亚洲精品一二区| 美女图片一区二区| 久久国产精品网站| 性一交一乱一区二区洋洋av| 亚洲香蕉在线观看| 午夜精品久久久久久久99黑人| 亚洲一区国产| 亚洲欧美精品suv| 久久精品一区蜜桃臀影院| 久久精品免费| 欧美黄色网络| 欧美午夜在线一二页| 国产欧美一区视频| 亚洲高清资源| 亚洲欧美综合国产精品一区| 欧美在线中文字幕| 欧美高清在线视频观看不卡| 亚洲日本黄色| 日韩视频永久免费| 西西裸体人体做爰大胆久久久| 久久成人一区| 欧美激情一区二区| 国产精品日韩欧美一区二区| 激情懂色av一区av二区av| 日韩视频―中文字幕| 欧美在线视频一区二区三区| 欧美韩国一区| 亚洲欧美日韩在线播放| 美国成人直播| 国产一区二区黄色| 亚洲视频电影在线| 欧美大秀在线观看| 欧美一区二区啪啪| 欧美日韩亚洲一区二区| 亚洲风情亚aⅴ在线发布| 亚洲欧美日韩综合国产aⅴ| 亚洲国产黄色| 久久亚洲风情| 国产一区二区你懂的| 亚洲一区欧美二区| 亚洲人成毛片在线播放女女| 久久精品国产在热久久 | 亚洲美女黄色| 久久久久免费视频| 亚洲伊人网站| 国产精品大全| 亚洲一区二区黄色| 亚洲日本中文| 欧美成人激情视频| 亚洲成人在线视频网站| 久久人人爽国产| 午夜日韩视频| 国产人妖伪娘一区91| 亚洲欧美激情诱惑| 在线视频一区二区| 欧美色图首页| 亚洲一区二区在线看| 亚洲青涩在线| 欧美激情在线观看| 亚洲精品裸体| 日韩视频在线免费观看| 欧美伦理一区二区| 一区二区久久久久| 亚洲精品少妇| 欧美日韩国产免费| 一区二区三区四区国产| 亚洲免费不卡| 国产精品久久777777毛茸茸| 亚洲视频在线看| 一区二区三区视频免费在线观看 | 亚洲在线一区二区| 国产精品美女久久久浪潮软件| 亚洲天堂av图片| 亚洲乱码国产乱码精品精可以看| 欧美高清视频在线观看| 99一区二区| 亚洲一区激情| 亚洲午夜小视频| 国产亚洲视频在线观看| 久久久久一区二区三区| 久久性色av| 一本色道久久综合亚洲精品按摩| 亚洲狠狠丁香婷婷综合久久久| 欧美成人中文字幕在线| 亚洲一级电影| 久久精彩免费视频| 亚洲美女视频在线观看| 亚洲中午字幕| 最新国产の精品合集bt伙计| 一二三四社区欧美黄| 国产一区亚洲| 亚洲片在线观看| 国产一区二区丝袜高跟鞋图片| 欧美韩日视频| 国产精品视频yy9299一区| 麻豆精品精品国产自在97香蕉| 欧美成人精品不卡视频在线观看| aa国产精品| 欧美一区二区三区在线观看 | 国产美女精品人人做人人爽| 久久尤物电影视频在线观看| 欧美精品国产一区| 久久久久久网| 欧美视频中文一区二区三区在线观看| 久久久久国产精品一区三寸| 欧美剧在线观看| 久久婷婷久久一区二区三区| 欧美日韩亚洲在线| 免费亚洲视频| 国产精品视频网址| 亚洲国产导航| 狠狠色丁香久久婷婷综合_中| 亚洲激情一区| 国产无一区二区| 99视频在线观看一区三区| 1769国产精品| 欧美一区二区| 午夜精品久久久久| 模特精品裸拍一区| 久久久久免费| 国产综合色在线| 亚洲夜间福利| 亚洲视频在线观看视频| 欧美高清视频免费观看| 欧美成人在线影院| 激情久久久久久| 午夜精品一区二区三区四区| 中文在线不卡视频| 欧美乱人伦中文字幕在线| 欧美激情第六页| 亚洲激情欧美| 女主播福利一区| 亚洲成人在线网站| 亚洲欧洲日产国码二区| 久久只有精品| 欧美α欧美αv大片| 在线精品高清中文字幕| 午夜日韩视频| 久久手机免费观看| 亚洲视频在线观看免费| 亚洲欧美日韩国产成人精品影院 | 欧美亚洲日本一区| 国产精品区二区三区日本| 在线性视频日韩欧美| 亚洲尤物影院| 国产精品每日更新在线播放网址| 99国产精品久久久| 亚洲欧美乱综合| 国产精品毛片在线看| 欧美一进一出视频| 嫩草影视亚洲| 日韩一二在线观看| 国产精品久久婷婷六月丁香| 亚洲自拍三区| 久久亚洲午夜电影| 亚洲欧洲精品一区| 欧美视频你懂的| 午夜欧美电影在线观看| 免费观看在线综合| 一区二区三区国产在线观看| 国产精品女同互慰在线看| 亚洲欧美综合v| 欧美va亚洲va日韩∨a综合色| 亚洲精品少妇30p| 国产精品久久久久一区二区| 欧美在线免费观看亚洲| 亚洲成色777777在线观看影院| 夜夜嗨av一区二区三区中文字幕| 国产精品狠色婷| 久久躁日日躁aaaaxxxx| 夜夜嗨av一区二区三区免费区| 久久九九国产精品| 99re66热这里只有精品3直播| 欧美日韩一区自拍| 欧美一区二区播放| 99国产精品久久久久久久久久| 久久精品国产99国产精品澳门| 亚洲国产精品视频一区| 国产精品久久夜| 男人插女人欧美| 西西裸体人体做爰大胆久久久| 亚洲欧洲一区二区天堂久久 | 日韩视频在线免费观看| 欧美一级专区免费大片| 91久久久一线二线三线品牌| 国产精品普通话对白| 欧美经典一区二区三区| 欧美一区二区视频在线观看2020| 亚洲高清毛片| 久久久国产视频91| 亚洲免费人成在线视频观看| 亚洲国产视频a| 国产午夜精品久久久久久久| 欧美日韩美女一区二区| 乱中年女人伦av一区二区| 欧美一区二区在线免费观看| 一本大道av伊人久久综合| 亚洲第一天堂无码专区| 久久视频一区二区|