runsisi
C++博客
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
45 随笔 :: 15 文章 :: 26 评论 :: 0 Trackbacks
<
2014年9月
>
日
一
二
三
四
五
六
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
C++
(rss)
随笔档案
2019年3月 (1)
2015年8月 (2)
2015年1月 (1)
2014年12月 (1)
2014年9月 (3)
2014年8月 (4)
2014年7月 (2)
2013年5月 (1)
2013年4月 (1)
2013年3月 (1)
2013年2月 (1)
2012年10月 (1)
2012年8月 (1)
2010年9月 (2)
2010年6月 (1)
2010年5月 (2)
2010年4月 (1)
2010年2月 (2)
2010年1月 (6)
2009年11月 (1)
2009年9月 (1)
2009年7月 (1)
2009年6月 (3)
2009年5月 (2)
2009年4月 (3)
文章分类
embedded system(2)
(rss)
linux(10)
(rss)
文章档案
2009年6月 (1)
2009年5月 (1)
2009年4月 (1)
2009年3月 (12)
相册
runsisi@HUST
搜索
最新评论
1. re: solar eclipse
哈哈,哈哈
--Www
2. re: Powerline字体补丁
评论内容较长,点击标题查看
--runsisi
3. re: Powerline字体补丁
您好,请问您的FontForge怎么编译的=。=我编译的都快哭了
--Xana
4. re: 又到一月发工资时。。
评论内容较长,点击标题查看
--zter
5. re: 又到一月发工资时。。[未登录]
加250说明你就是一个250,觉悟没有
--wony
阅读排行榜
1. C++14 标准制定完成(17558)
2. Powerline字体补丁(7738)
3. 使用ceph-deploy工具部署时出现错误:Unable to find /var/lib/ceph/bootstrap-osd/ceph.keyring(6576)
4. gxgx ^^(3484)
5. ceph测试环境搭建(3108)
评论排行榜
1. 2009我们一起毕业(8)
2. 表白(7)
3. 又到一月发工资时。。(2)
4. Powerline字体补丁(2)
5. audacious-mac-0.3.10.modified(2)
使用MFC规则DLL, DLL的资源问题
网上关于MFC规则DLL的创建和使用的资料比较多,其实也就那两三篇转过来转过去:)
但是好像都只是用自己写的MFC主程序调用MFC DLL,涉及到DLL的资源问题时都会提及三种解决方法:
1
) AFX_MANAGE_STATE(AfxGetStaticModuleState());
2
) AfxGetResourceHandle();
AfxSetResourceHandle();
3
) 在主程序中使用方法2;
如果是自己写的MFC主程序自然三种方法都可以,但是如果不是这种情况呢
?
比如:
1
) 主程序是SDK写的,然后调用MFC DLL
2
) 主程序根本就不是我们自己写的,MFC DLL只是作为一个HOOK DLL注入主程序中
3
) 主程序是用其他GUI库写的
在这几种情况下上述的2)、
3
)两种方法是无法使用的,想想为什么
?
只有方法1)可行,当然我们也可以使用如下的方法:
_AFX_THREAD_STATE
*
pThreadState
=
AfxGetThreadState();
AFX_MODULE_STATE
*
pOldModState
=
pThreadState
->
m_pModuleState;
//
Ur code here
pThreadState
->
m_pModuleState
=
pOldModState;
为什么使用MFC DLL
?
呵呵。
有的文章里有这样一段话:
AFX_MANAGE_STATE(AfxGetStaticModuleState());的方法只能等函数的作用空间结束之后才恢复资源句柄。由于可执行文件必须重画工具条等原因,因此建议只要有可能就必须恢复资源句柄,否则可能会遇到许多问题。比如说,如果用户移动DLL的对话框,而此时资源句柄仍然为DLL的资源,那么程序就会崩溃。最好的恢复句柄的时机在对话框响应WM_INITDIALOG消息的时候,因为这时对话框的模板等已经读出了。
不知道这段话的结论是怎样得出来的,而所谓的恢复句柄的方法我也不知道他是怎么恢复的。实际测试的结果是根本不需要考虑这个,即使是单线程主程序,MFC DLL在主程序的主线程内执行;如果MFC DLL是在单独的一个线程内执行,则更加不需要考虑这个问题;如果主程序是SDK程序则根本不需要考虑这个问题,因为SDK程序都是直接操作句柄的。
如果觉得有错那就使用我提供的另外一种方法,或者使用花括号吧,呵呵。
runsisi@HUST
posted on 2010-09-17 18:41
runsisi
阅读(377)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
博问
Chat2DB
管理
Powered by:
C++博客
Copyright © runsisi