Как я могу получить 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
Ответ 5
Функция 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