HMODULE GetCurrentModule()
{ // NB: XP+ solution!
HMODULE hModule = NULL;
GetModuleHandleEx(
GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
(LPCTSTR)GetCurrentModule,
&hModule);
return hModule;
}
__ImageBase
モジュールの DOS ヘッダーであるリンカ生成シンボルです (MSVC のみ)。そこから、そのアドレスを HINSTANCE
にキャストできます または HMODULE
.そのため、API を経由するよりも便利です。
したがって、これを行うだけです:
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#define HINST_THISCOMPONENT ((HINSTANCE)&__ImageBase)
https://devblogs.microsoft.com/oldnewthing/20041025-00/?p=37483 から
私なら GetModuleHandleEx()
を見ます フラグ GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
の使用 . GetCurrentModule()
を変更できるようです VirtualQuery()
の代わりにこのルーチンを呼び出す 、 GetCurrentModule()
のアドレスを渡します lpModuleName
のように
ETA:
const HMODULE GetCurrentModule()
{
DWORD flags = GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS;
HMODULE hm = 0;
::GetModuleHandleEx( flags, reinterpret_cast<LPCTSTR>( GetCurrentModule ), &hm );
return hm;
}
私はそれを試していませんが、それはあなたが望むものになると思います.