HINSTANCE Dll
28.06.2004
|
Odi$$ey |
Tom>нужно узнать, не по её имени, так как в текущем процессе есть 2 dll с одинаковым именем, но сами разные
если не проходит простейший вариант
то, есть еще такие:
(c) Павел Блудов http://www.rsdn.ru/forum/?mid=261670
(с) Alex Fedotov http://www.rsdn.ru/forum/?mid=31274
если не проходит простейший вариант
HINSTANCE hInst;
...
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH)
hInst = hinstDll;
}
...
use hInst in program
то, есть еще такие:
extern "C" IMAGE_DOS_HEADER __ImageBase;
#define THIS_MODULE_HINSTANCE reinterpret_cast<HINSTANCE>(&__ImageBase)
(c) Павел Блудов http://www.rsdn.ru/forum/?mid=261670
HINSTANCE __stdcall GetInstanceFromAddress(
PVOID pEip
)
{
_ASSERTE(pEip != NULL);
MEMORY_BASIC_INFORMATION mem;
if (VirtualQuery(pEip, &mem, sizeof(mem)))
{
_ASSERTE(mem.Type == MEM_IMAGE);
_ASSERTE(mem.AllocationBase != NULL);
return (HINSTANCE)mem.AllocationBase;
}
return NULL;
}
__declspec(naked)
HINSTANCE __stdcall GetCurrentInstance()
{ __asm {
#ifdef _M_IX86
mov eax, [esp]
push eax
jmp GetInstanceFromAddress
#else
# error This machine type is not supported.
#endif
} }
extern "C" void * _ReturnAddress();
#pragma intrinsic(_ReturnAddress)
HINSTANCE GetCurrentInstance()
{
MEMORY_BASIC_INFORMATION mem;
if (VirtualQuery(_ReturnAddress(), &mem, sizeof(mem)))
{
_ASSERTE(mem.Type == MEM_IMAGE);
_ASSERTE(mem.AllocationBase != NULL);
return (HINSTANCE)mem.AllocationBase;
}
return NULL;
}
(с) Alex Fedotov http://www.rsdn.ru/forum/?mid=31274
28.06.2004 0 комментариев |