Как я могу получить HINSTANCE из DLL? - PullRequest
15 голосов
/ 24 января 2010

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

Функция DLLMAIN равна

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

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

HMODULE и HINSTANCE одинаковы?

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

Ответы [ 5 ]

22 голосов
/ 24 января 2010

Отрывок из книги Windows Via C / C ++ [1]

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

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

5 голосов
/ 01 апреля 2015

Microsoft для конкретного компоновщика

#include "windows.h"
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
#pragma warning(disable: 4047)
HINSTANCE hInstance = (HINSTANCE)&__ImageBase;
#pragma warning(default: 4047)
4 голосов
/ 24 января 2010

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

GetModuleHandle(NULL);
1 голос
/ 30 августа 2010

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

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

0 голосов
/ 01 апреля 2011

Функция DllMain, как описано в MSDN:

BOOL WINAPI DllMain(
  __in  HINSTANCE hinstDLL,
  __in  DWORD fdwReason,
  __in  LPVOID lpvReserved
);

http://msdn.microsoft.com/en-us/library/ms682583%28v=vs.85%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...