Komplizierter wird es nur noch, wenn man die Situation hat, daß man den Pfad der
DLL aus der aktuellen
DLL haben will, man aber (weil bspw. ursprünglich aus einer Bibliothek stammend) hInstance (der
DLL) nicht kennt, NULL nicht nutzen kann, GetModuleHandle(NULL) auch keinen Sinn macht. Die generischste und meines Erachtens nach beste Methode zum Ermitteln des Pfades des aktuellen Moduls (nicht der EXE selbst, sondern des Moduls in dem der Code ausgeführt wird) ist, eine statische Variable zu deklarieren (also nicht auf dem Stack
) und die Basisadresse des Moduls aus der Adresse dieser Variablen zu ermitteln. Alternativ zur statischen Variablen geht auch ein Pointer auf die aktuelle Funktion welche unten beschriebene beschriebene Methode implementiert.
Dazu wird
VirtualQuery benutzt. Erster Parameter ist die Adresse der statischen Variablen. Zweiter Parameter ist ein Zeiger auf eine MEMORY_BASIC_INFORMATION-Struktur, deren Member "BaseAddress" nach dem (erfolgreichen) Aufruf von
VirtualQuery nur noch in HMODULE/HINSTANCE gecastet werden muß und dann wirklich die korrekte Basisadresse enthält.
GetModuleFileName(HMODULE(mbi->BaseAddress), Puffer, Groesse);