當(dāng)前模塊的句柄在程序進(jìn)入點(diǎn)可以獲得,一般做法是保存為一個(gè)全局變量,以后使用這個(gè)全局變量即可。但有時(shí)在寫一些比較通用的代碼時(shí)剛好要用到模塊句柄,如果還去訪問這個(gè)全局變量就破壞了代碼的通用性。下面函數(shù)可以取得當(dāng)前模塊的句柄,無須保存,隨調(diào)隨得:view plaincopy to clipboardprint? 01./* 02. 通過一個(gè)地址取模塊句柄 03.*/ 04.inline HMODULE ModuleHandleByAddr(const void* ptrAddr) 05.{ 06. MEMORY_BASIC_INFORMATION info; 07. ::VirtualQuery(ptrAddr, &info, sizeof(info)); 08. return (HMODULE)info.AllocationBase; 09.} 10./* 11. 當(dāng)前模塊句柄 12.*/ 13.inline HMODULE ThisModuleHandle() 14.{ 15. static HMODULE sInstance = ModuleHandleByAddr((void*)&ThisModuleHandle); 16. return sInstance; 17.} |