Иногда вышеупомянутый метод не может быть использован, например, когда вам все еще приходится поддерживать Windows 2000 по какой-либо причине.В таком случае полезно иметь следующий трюк:
Мы объявляем статическую переменную, что означает, что ее адрес будет внутри модуля, с которым она была связана.Затем мы используем адрес этой переменной, чтобы запросить базовый адрес этой выделенной области, то есть HMODULE
.
HMODULE GetCurrentModuleHandle()
{
MEMORY_BASIC_INFORMATION mbi;
static int iDummy;
VirtualQuery(&iDummy, &mbi, sizeof(mbi));
return (HMODULE)mbi.AllocationBase;
}
Это никоим образом не делает недействительным ответ Марка!Просто имейте это в виду в качестве запасного варианта, если вам нужно, чтобы ваши программы работали на древних системах.