程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> DLL卸載自身

DLL卸載自身

編輯:C++入門知識

如果使用 FreeLibrary卸載自身DLL的話會出現一個問題,在 FreeLibrary 之後,該 DLL 的地址空間就不再可用了,但這時 EIP 指針仍然會指向 FreeLibrary 的下面一句,於是程序就會崩潰。所幸,Win32 提供了另外的一個 API——FreeLibraryAndExitThread,這個函數能夠在銷毀 DLL 之後直接調用 ExitThread,這樣一來 EIP 指針就不會指向非法的地址了。   [cpp]   #include <Windows.h>           HMODULE g_hDll = NULL;           DWORD WINAPI UnloadProc(PVOID param)      {          MessageBox(0,"test","test",0);        FreeLibraryAndExitThread(g_hDll,0);          return 0;      }            BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, PVOID lpvReserved)      {          if (DLL_PROCESS_ATTACH == fdwReason)          {              g_hDll = (HMODULE)hinstDLL;              HANDLE hThread = CreateThread(NULL, 0, UnloadProc, NULL, 0, NULL);              CloseHandle(hThread);          }          return TRUE;      }                 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved