::GetModuleHandle
-
Hi,
ich habe eine .dll mit der Endung .ax die von einem Prozess geladen wird.
Nun muss ich in der DLL unbedingt wissen von wo diese geladen wurde.
Das klappt mit :HMODULE ::GetModuleHandle("MyDllNam.DLL");
So liefert im Anschluss :
CHAR parampath[MAX_PATH << 1] = { 0 };
::GetModuleFileName(hmod, ¶mpath[0], sizeof(parampath));Den kompletten Pfad von wo meine DLL geladen worden ist.
Aber:
leider nicht immer. Lade ich das selbe Modul von einem anderen Prozess,
liefert plötzlich und unerwartet GetModuleHandle = 0Wie kann ich sicherstellen die Lokalität der *.dll in Erfahrung zu bringen ?
Danke für Hinweise
Gruß
Karsten
-
HMODULE GetCurrentModule() { // NB: XP+ solution! HMODULE hModule = NULL; GetModuleHandleEx( GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCTSTR)GetCurrentModule, &hModule); return hModule; }
Das funktiniert, WTF ...
-
Anmerkungen aus MSDN:
If the module's reference count is incremented, the caller must use the FreeLibrary function.
If the function fails, the return value is zero. To get extended error information, see GetLastError.