::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, &parampath[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 = 0

    Wie 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.


Anmelden zum Antworten