Определить текущий 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);
Другие вопросы по тегам