DLL: Eigenen Pfad und Name des Aufrufer herausfinden



  • Hallo Forum,

    wie bekomme ich die Namen der Exe (oder ev auch DLL) heraus die meine DLL aufgerufe hat und wie den Namen und Pfad meiner DLL?

    Wenn ich diesen Tip anwende wird mir komischerweise der Name des Aufrufers gegeben:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-157428.html

    Bleibt noch der Name der DLL selbst.

    Vielen Dank im voraus

    Bommel



  • Was meinst du mit aufrufen? Den Dateipfad der Moduldatei findest du mit GetModuleFileName() heraus.



  • Ich habe eine Test DLL erstellt und mit Excel eine Funktion aufgerufen:

    BOOL APIENTRY DllMain(HANDLE hModule, 
                          DWORD  ul_reason_for_call, 
                          LPVOID lpReserved) {
    	switch (ul_reason_for_call) {
    	case DLL_PROCESS_ATTACH:
    		TCHAR szFileName[MAX_PATH];
    		GetModuleFileName(0, szFileName, sizeof(szFileName) / sizeof(TCHAR));
    		MessageBox(0, szFileName, szFileName, 0);
    		break;
    	case DLL_THREAD_ATTACH:
    	case DLL_THREAD_DETACH:
    	case DLL_PROCESS_DETACH:
    		break;
    	}
    	return TRUE;
    }
    

    Hier wurde mir dann der Pfad zu Excel angezeigt, obwohl ich ja eigentlich den Pfad zu meiner DLL erwartet hätte. Wie kriege ich nun den Pfad zur DLL heraus?



  • Ja wenn du mal in die MSDN geschaut hättest, würdest du gesehen haben, daß der erste Parameter das Handle des Moduls ist, dessen Pfad du haben willst. Wenn du NULL übergibst, wird der Pfad des EXE Moduls zurückgegeben. Also rufs mal mit hModule als 1.Paramter auf, dann wirds auch den Pfad zur DLL zurückgeben.



  • Es klappt jetzt. Das hatte ich schon ausprobiert. Aber wo dann diese Meldung kam:

    cannot convert parameter 1 from 'void *' to 'struct HINSTANCE__ *'
    dachte ich ich sei auf den falschem Weg....



  • Vielen Dank 🙂


Anmelden zum Antworten