Определить текущий HINSTANCE?
HINSTANCE приложения win32 передается в WinMain, но есть ли другой способ определения текущего HINSTANCE (если вы не можете сказать, я очень новичок в программировании на win32!)? Мне нужно создать окно внутри библиотеки и (поскольку библиотека является кроссплатформенной), id предпочитают не передавать его внутрь.
4 ответа
Если память не изменяет, GetModuleHandle(NULL);
возвращает дескриптор экземпляра
__ImageBase - ваш друг, особенно в случае библиотек.
Обратите внимание, что ссылка на блог (Р. Чен, хотя и не такая, как ссылка Брайана Бонди) стоит прочитать (включая комментарии!)
Если вы используете MFC, вы можете использовать AfxGetInstanceHandle.
Если вы не используете MFC, вы можете использовать: GetWindowLong(hWnd, GWL_HINSTANCE)
Функция AfxGetStaticModuleState() делает свое дело. Если вы вызываете его внутри dll, функции возвращают дескриптор dll, если при вызове внутри exe он возвращает дескриптор исполняемого файла.
DWORD size;
TCHAR fileName [MAX_PATH];
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle;
::GetModuleFileName (hModule, fileName, size);