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

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类:

2010-12-08 18:19:25

核心MFC DLL  

核心MFC DLL,就是MFC核心类库形成的DLL,通常说动态链接到MFC,就是指核心MFC DLL

核心MFC DLL实际上也是一种扩DLL,因它定了自己的展模coreDLL实现了自己的DllMain函数,使用AfxInitExtensionModule初始化核心DLL展模coreDLL,并且DllMain还创建了CDynLinkLibrary,把核心DLL展模coreDLL接到当前用程序的模中。所有些,都符合DLL准。

但是,核心MFC DLL是一特殊的DLL,因它定实现MFC类库,模线程状程状、状管理和使用的机制就是核心MFC DLL实现的。例如核心MFC DLL出的模态变量,即_afxBaseModuleState,就是动态链接到MFCDLL用程序的模

但是MFC DLL不作独立的模出来,而是把自己作一个展模理。当用程序动态链接到MFC DLLMFC DLL把自己的展模coreDLL接到模afxBaseModuleState,模的成员变m_hCurrentInstanceHandle指定为应用程序的句柄。当规则DLL动态链接到MFC DLL,由规则DLLDllMain把核心MFC DLL展模coreDLL接到规则DLL的模afxModuleState中,模afxModuleStatem_hCurrentInstanceHandle指定为规则DLL的句柄。

afxModuleState规则DLL的模下一讨论

动态链接的规则DLL的模实现

 

在本中,动态链接到MFC DLL(定_AFXDLL)的规则DLL在下文为规则DLL

1规则DLL的模的定

规则DLL有自己的模_afxModuleState,它是一个静态变量,定如下:

static _AFX_DLL_MODULE_STATE afxModuleState;

_AFX_DLL_MODULE_STATE的基AFX_MODULE_STATE

在前面的模中提到的AfxGetStaticModuleState函数,其定实现如下:

_AFX_MODULE_STATE* AFXAPI AfxGetStaticModuleState()

{

AFX_MODULE_STATE* pModuleState = &afxModuleState;

return pModuleState;

}

它返回规则DLL的模afxModuleState

规则DLL的内部函数使用afxModuleState出函数在被用的候首先切,然后步处理。

2规则DLL的模的初始化

从用角度来看,动态链接到MFC DLL规则DLL不需要DllMain函数,只要提供CWinApp象即可。其MFC内部是在实现扩DLL的方法基上来实现规则DLL的,它不仅为规则DLL提供了DllMain函数,而且规则DLL也有DLLcontrolDLL

便指出,和DLL相比,规则DLL有一个CWinApp(或其派生用程序象和一个模afxModuleState用程序象是全局象,所以在规则DLLDllMain之前已建,DllMain可以用它的初始化函数InitInstance。模afxModuleState是静全局量,也在DllMain之前被建,DllMain访问态时得到的就是该变量。DLL是没有CWinApp象和模的,它只能使用用程序或者规则DLLCWinApp象和模

由于核心MFC DLLDllMain用的候,访问的必定是用程序的模,要把核心DLL展模态链接到规则DLL的模中,必过规则DLLDllMain实现

规则DLLDllMainMFC内部实现)把参数1表示的模源句柄通AfxWinInit函数保存到规则DLL的模中。便指出,WinMain也通AfxWinInit函数把源和模句柄保存到用程序的模中。

然后,DllMain还创建了一个CDynLinkLibrary象,把核心MFC DLL展模 coreDLL接到本DLL的模afxModuleState

接着,DllMain得到自己的用程序象并InitInstance初始化。

之后,DllMain建另一个CDynLinkLibrary象,把本DLL展模controlDLL接到本DLL的模afxModuleState

3)使用规则DLL用程序可不需要CwinApp

规则DLL源等是由DLL内部使用的,不存在源或者CRuntimeClass类输出的问题这样调规则DLL的程序不必具有模,不必规则DLL的内部实现,不一定需要CwinApp象,所以可以是任意Win32用程序,

有一点需要指出,DllMain也是规则DLL的入口点,在它之前,DllMainRawDllMain了模RawDllMain是静态链接的,所以不必考

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