Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1017180
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-12-08 18:20:27

1.                      信息的作用

 

在分析了MFC实现和管理机制之后,信息的作用专门讨论

1信息的保存和管理

 

传统上,线程状、模等包含的信息是全局量,但是了支持Win32s、多线程、DLL等,量必是限于程或者线程范内有效,或者限于某个模内有效。也就是,不再可能把它全局理。因此,MFC引入模线程、模-线程状等来保存和管理一些重要的信息。

例如:一个模注册了一个窗口之后,用程序要保存窗口的名字,以便在模退出取消注册的窗口。因此,模使用成员变m_szUnregisterList在注册成功之后保存的窗口名字。窗口注册2.2.1

又如:Tooltip窗口是线程相的,线程一个,所以线程状用成员变m_pToolTip来保存本线程的MFC Tooltip窗口象。Tooltip窗口13.2.4.4

有,MFC象是线程和模的,所以模块线程中有一组变量用来管理本线MFC象到Windows象的映射系。MFC象和Windows象的映射,稍后的讨论

线程状、模块线程状个成员变量都有自己存在的必要和作用,里就不一一述了,在此,只是强调实现对句柄和源句柄等信息的保存和管理,这对MFC用程序是非常重要的。

SDK 下的用程序或者DLL,通常使用一个全局量来保存模/源句柄。有了模之后,程序就不必这么作了。规则DLL或者用程序的模源句柄在DllMainWinMain被保存到了当前模的模中。如果是DLL其句柄被保存到展模中,并通CDynLinkLibrary接到主模的模

9-8示意了MFC态对资源、CRuntimeClass象、OLE工厂等模信息的管理。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9-8明:

的主模表示动态链接到MFC DLL用程序或者规则DLL的模,其源句柄和模句柄用来找和源,源句柄一般是用程序的模句柄;CRuntimeClass象列表和COleObjectFactory象列表分表示初始化了的CRuntimeClass象和OLE工厂象;CDynLinkLibrary列表包含了它引用的系列DLL展模(包括核心MFC DLL的状),表中的一个CDynLinkLibrary对应一个展模,代表了该对象的DLL的有关资源、信息。

MFC源、CRuntimeClassOLE工厂,首先找模,然后,遍CDynLinkLibrary表搜索相象。下面两节举明。

2        MFC源、运行信息的

 MFC内部使用的找函数是:

HINSTANCE AfxFindResourceHandle(LPCTSTR lpszName, LPCTSTR lpszType)

其中:

参数1是要找的源名称,参数2是要找的型。

返回包含指定源的模的句柄。

上述函数的找算法如下:

1)      如果程模(主模)不是系使用::FindResource(下同)搜索它,成功返回;

 

2)      如果没有找到,CDynLinkLibrary象列表,搜索所有的非系,成功返回;

  3) 如果没有找到,则检查主模源,成功返回;

4)      如果没有找到,并且主模是系搜索它,成功返回;

5) 如果没有找到,CDynLinkLibrary象列表,搜索所有的系,成功返回;

  6) 如果没有找到,使用AfxGetResourceHanlde返回用程序的源。

 需要指出的是,遍CDynLinkLibrary象列表,必采取同措施,防止其他线程改变链表。MFC是通过锁定全局CRIT_DYNLINKLIST实现的,似的全局MFC了多个。

运行时类信息的找算法似。

3.3.4指出,“<<”序列化操作,首先需要搜索到指定的运行信息,方法如下:

CRuntimeClass* PASCAL CRuntimeClass::Load(

CArchive& ar, UINT* pwSchemaNum)

1)      主模CRuntimeClass象列表m_classList,搜索主模是否实现了指定的CRuntimeClass

2)      CDynLinkLibrary象列表m_libraryList对每一个CDynLinkLibrary象,遍它的CRuntimeClass象列表m_classList这样,所有的DLLCRuntimeClass象都会被搜索到。

阅读(1394) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~