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