web-dev-qa-db-fra.com

Déterminer la HINSTANCE actuelle?

La HINSTANCE d'une application win32 est passée à WinMain, mais existe-t-il une autre façon de déterminer la HINSTANCE actuelle (au cas où vous ne pourriez pas le dire, je suis très nouveau dans la programmation win32!)? J'ai besoin de créer une fenêtre à l'intérieur d'une bibliothèque et (comme la bibliothèque est multiplateforme), je préfère ne pas avoir à la transmettre.

46
dicroce

Si la mémoire est utilisée, GetModuleHandle(NULL); renvoie le handle d'instance.

76
Jerry Coffin

__ ImageBase est votre ami, surtout dans le cas des bibliothèques.

Notez que l'article de blog lié (par R. Chen, bien que ce ne soit pas le même article que celui lié par Brian Bondy) mérite d'être lu (y compris les commentaires!)

19
Serge Wautier

Si vous utilisez MFC, vous pouvez utiliser AfxGetInstanceHandle.

Si vous n'utilisez pas MFC, vous pouvez utiliser: GetWindowLong (hWnd, GWL_HINSTANCE)

8
Brian R. Bondy

La fonction AfxGetStaticModuleState () fait l'affaire. Si vous l'appelez dans une dll, les fonctions renvoient le handle vers la dll, si l'appel dans un exe retourne le handle vers l'exécutable.

DWORD size;
TCHAR fileName [MAX_PATH];
HMODULE hModule = AfxGetStaticModuleState()->m_hCurrentInstanceHandle;
::GetModuleFileName (hModule, fileName, size);
0
Marcel Mateman