Как я могу получить HINSTANCE из DLL?

Я создал DLL в VС++ как проект Win32

Функция DLLMAIN

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    return TRUE;
}

Теперь мне нужно HINSTANCE для DLL, которое нужно передать в функции Win32.

Являются ли HMODULE и HINSTANCE такими же?

Как я могу получить HINSTANCE?

Ответы

Ответ 1

Выдержка из книги Windows Via C/С++ [1]

Примечание. Как оказалось, HMODULE s и HINSTANCE s - это одно и то же. Если документация для функции указывает, что требуется HMODULE, вы можете передать HINSTANCE и наоборот. Существует два типа данных, поскольку в 16-битных Windows HMODULE s и HINSTANCE определены разные вещи

[1] Рихтер, Джеффри и Насарр, Кристоф, Windows Через C/С++, 5-е изд., Редмонд: Microsoft Press 2008, стр. 74

Ответ 2

Спецификатор Microsoft link

#include "windows.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#pragma warning(disable: 4047)
HINSTANCE hInstance = (HINSTANCE)&__ImageBase;
#pragma warning(default: 4047)

Ответ 3

Я думаю, что это то же самое. Если вы хотите HINSTANCE для текущего процесса (exe), вы должны использовать

GetModuleHandle(NULL);

Ответ 4

Вызов GetModuleHandle (NULL) из dll вернет Hinstanc EXE, который запустил DLL; чтобы получить Hinstance для dll, работающего в данный момент, попробуйте этот совет:

http://www.dotnet247.com/247reference/msgs/13/65259.aspx