HINSTANCE Dll

Odi$$ey Odi$$ey
Tom>нужно узнать, не по её имени, так как в текущем процессе есть 2 dll с одинаковым именем, но сами разные

если не проходит простейший вариант

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