WEB开发网
开发学院软件开发VC MFC教程(7)-- MFC的DLL 阅读

MFC教程(7)-- MFC的DLL

 2010-03-25 20:35:12 来源:WEB开发网   
核心提示:DLL的几点说明DLL应用程序的入口点是DllMain,对程序员来说,MFC教程(7)-- MFC的DLL(5),DLL应用程序的入口点是DllMain,DllMain负责初始化(Initialization)和结束(Termination)工作,RawDllMain在DLL应用程序动态链接到MFC DLL时被需要,但

DLL的几点说明

DLL应用程序的入口点是DllMain。

对程序员来说,DLL应用程序的入口点是DllMain。

DllMain负责初始化(Initialization)和结束(Termination)工作,每当一个新的进程或者该进程的新的线程访问DLL时,或者访问DLL的每一个进程或者线程不再使用DLL或者结束时,都会调用DllMain。但是,使用TerminateProcess或TerminateThread结束进程或者线程,不会调用DllMain。

DllMain的函数原型符合DllEntryPoint的要求,有如下结构:

BOOL WINAPI DllMain (HANDLE hInst,

ULONG ul_reason_for_call,LPVOID lpReserved)

{

switch( ul_reason_for_call ) {

case DLL_PROCESS_ATTACH:

...

case DLL_THREAD_ATTACH:

...

case DLL_THREAD_DETACH:

...

case DLL_PROCESS_DETACH:

...

}

return TRUE;

}

其中:

参数1是模块句柄;

参数2是指调用DllMain的类别,四种取值:新的进程要访问DLL;新的线程要访问DLL;一个进程不再使用DLL(Detach from DLL);一个线程不再使用DLL(Detach from DLL)。

参数3保留。

如果程序员不指定DllMain,则编译器使用它自己的DllMain,该函数仅仅返回TRUE。

规则DLL应用程序使用了MFC的DllMain,它将调用DLL程序的应用程序对象(从CWinApp派生)的InitInstance函数和ExitInstance函数。

扩展DLL必须实现自己的DllMain。

_DllMainCRTStartup

为了使用“C”运行库(CRT,C Run time Library)的DLL版本(多线程),一个DLL应用程序必须指定_DllMainCRTStartup为入口函数,DLL的初始化函数必须是DllMain。

_DllMainCRTStartup完成以下任务:当进程或线程捆绑(Attach)到DLL时为“C”运行时的数据(C Runtime Data)分配空间和初始化并且构造全局“C++”对象,当进程或者线程终止使用DLL(Detach)时,清理C Runtime Data并且销毁全局“C++”对象。它还调用DllMain和RawDllMain函数。

RawDllMain在DLL应用程序动态链接到MFC DLL时被需要,但它是静态的链接到DLL应用程序的。在讲述状态管理时解释其原因。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:MFC 教程 MFC

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接