WEB开发网
开发学院软件开发VC DLL(Dynamic Link Libraries)全面剖析 阅读

DLL(Dynamic Link Libraries)全面剖析

 2006-07-20 11:40:14 来源:WEB开发网   
核心提示: 4、如果它希望输出 CRuntimeClass 类型的对象或者资源,则需要提供一个初始化函数来创建一个 CDynLinkLibrary 对象,DLL(Dynamic Link Libraries)全面剖析(5),并且,有必要把初始化函数输出;5、使用扩展 DLL 的 MFC 应用程序必须有

4、如果它希望输出 CRuntimeClass 类型的对象或者资源,则需要提供一个初始化函数来创建一个 CDynLinkLibrary 对象。并且,有必要把初始化函数输出;

5、使用扩展 DLL 的 MFC 应用程序必须有一个从 CWinApp 派生的类,而且,一般在InitInstance 里调用扩展 DLL 的初始化函数。

DLL入口函数

1、每一个 DLL 必须有一个入口点,DLLMain 是一个缺省的入口函数。DLLMain 负责初始化和结束工作,每当一个新的进程或者该进程的新的线程访问 DLL 时,或者访问 DLL 的每一个进程或者线程不再使用DLL或者结束时,都会调用 DLLMain。但是,使用 TerminateProcess 或 TerminateThread 结束进程或者线程,不会调用 DLLMain。

DLLMain的函数原型:

BOOL APIENTRY DLLMain(HANDLE hModule,DWORD 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;
  }
}

参数:

hMoudle:是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符);

ul_reason_for_call:是一个说明动态库被调原因的标志。当进程或线程装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库被调用的原因。它所有的可能值为:

DLL_PROCESS_ATTACH: 进程被调用;

DLL_THREAD_ATTACH: 线程被调用;

DLL_PROCESS_DETACH: 进程被停止;

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

Tags:DLL Dynamic Link

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