Dateipfad zu der eigenen Applikation/DLL finden [C++, Windows]

Manchmal benötigt man den absoluten Pfad zu der eigenen Applikation um zum Beispiel Unterordner für bestimmte Ressourcen lokalisieren zu können.

Unter Windows gibt es die Möglichkeit über die Funktion GetModuleFileName(...) den Pfad zur ausgeführten EXE relativ einfach zu bestimmen. Die Funktion erwartet ein Modul-Handle als ersten Parameter, hier kann man einfach NULL übergeben.

Entwickelt man allerdings eine DLL, die in eine andere Applikation geladen wird und möchte von der eigenen DLL den Pfad erfragen, so wird es etwas komplizierter. Es ist dann nicht mehr möglich einfach NULL als Modul-Handle-Parameter zu übergeben.

Auf Codeproject habe ich eine gut funktionierende Möglichkeit gefunden, dass Handle einer DLL bestimmen zu können:

// Irgendwo folgende Zeile im Code der DLL hinterlegen
EXTERN_C IMAGE_DOS_HEADER __ImageBase;

// Dann kann später die angegebene Variable als passendes Handle gecastet werden.
char buffer[MAX_PATH];
GetModuleFileName((HINSTANCE)&__ImageBase, buffer, sizeof(buffer));

Diese Möglichkeit der Lokalisation eines DLL-Pfades hat bei mir sehr gut funktioniert (getestet und Windows XP und Windows 7).

Trackback URL for this post:

http://blog.mschoeffler.de/trackback/24

Kommentare

Vielen Dank! Nach sowas etwas

Vielen Dank! Nach sowas etwas habe ich bisher lange vergeblich gesucht. Auf diese Lösung wäre ich mit großer Sicherheit nicht gekommen. Ich habe gehofft, dass es einen kompfortableren Weg gibt um den Pfad zu ermitteln. Mittlerweile bin ich der Meinung, dass dies die sauberste Lösung für dieses Problem ist.
Mathias Tönnels