WEB开发网
开发学院软件开发VC DLL(Dynamic Link Libraries)专题 阅读

DLL(Dynamic Link Libraries)专题

 2008-11-06 19:26:49 来源:WEB开发网   
核心提示: 3、DLLMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,DLL(Dynamic Link Libraries)专题(5),如果返回0,DLLMmain也返回0;4、如果它希望输出CRuntimeClass类型的对象或者资源(Resources),当进

3、DLLMain调用AfxInitExtensionModule函数,必须检查该函数的返回值,如果返回0,DLLMmain也返回0;

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

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

DLL入口函数

1、每一个DLL必须有一个入口点,DLLMain是一个缺省的入口函数。DLLMain负责初始化(Initialization)和结束(Termination)工作,每当一个新的进程或者该进程的新的线程访问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:是一个说明动态库被调原因的标志。当进程或线程装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库被调用的原因。它所有的可能值为:

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

Tags:DLL Dynamic Link

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