Pfad der aktuellen Assembly auslesen



  • Hallo

    In meiner DLL die von einer dritt Applikation verwendet wird benötige ich eine settings datei. Nun würde ich den Pfad gerne relativ zu meiner DLL haben wollen.

    Bisher ermittle ich den Pfad mit den Microsoft Funktionen GetModuleHandle und GetModuleFileName .

    Gibt es da auch ne Möglichkeit ohne die speziellen Microsoft Funktionen?



  • Nein, das ist natürlich systemspezifisch.


  • Administrator

    Mir ist nichts bekannt. Unter POSIX gibt es meistens dladdr. Aber das ist, glaube ich, offiziell nicht standardisiert. Müsstest dir dann halt per Preprocessor eine bedingte Kompilierung einbauen.

    Aber lässt du dir den Pfad zur Settings-Datei nicht geben? Oder kannst du allenfalls mit dem aktuellen Arbeitsverzeichnis arbeiten? Für das Arbeitsverzeichnis gäbe es seit C++17 eine Möglichkeit: https://en.cppreference.com/w/cpp/filesystem/current_path



  • Dir ist aber klar, dass solche en Pfad im Programmverzeichnis meistens schreibgeschützt ist.
    Also Lesen ist ok, Schreiben ist bei normaler Windows Konfiguration auf den C:\Program File nur als Admin (Anwendung muss als Admin gestartet werden) möglich.
    GetModuleFileName lifert Dir nur dann den Pfad der DLL, wenn Du auch das HINSTANCE/HMODULE Handle der DLL angibst.
    Sonst bekommst Du den Pfad der Anwendung, wenn Du NULL übergibst.



  • Hallo zusammen

    Ja ich weiß es ist nicht die sauberste Vorgehensweise.
    Wie ihr bereits erwähnt habt gibt es andere Wege die Einstellungsdatei abzulegen.
    Auch dass wenn ich Null übergebe den Pfad der Anwendung erhalte ist mir klar.

    Die DLL liegt nicht in C:\Programm Files Sondern in einem eigenen Verzeichniss. Es handelt sich um eine Maschinensteuerung, die von Kollegen programmiert wird. Ich bin dabei die DLL etwas umzubauen. Bisher gab es noch gar keine Settingsdatei. Vorerst mal kleine Schritte.