Pfad meiner DLL ermitteln



  • Hallo,

    ich habe ein Win32 DLL Projekt (VST Audio Plugin in VS2005).
    Im Konstruktor meiner Klasse innerhalb der DLL möchte ich ein paar Werte aus einer ini Datei einlesen.

    Kein Problem, nur wie komme ich an den Pfad an dem sich die DLL befindet?
    GetCommandLine() oder GetModuleFileName(....) liefern mir nur den Pfad der Exe-Datei (Host-Anwendung) mit der ich die DLL ausführe.

    Die ini Datei liegt im selben Verzeichnis wie die DLL.

    Jemand eine Idee?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum MFC (Visual C++) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • habe die Lösung erhalten, falls es noch jemand interessiert:

    TCHAR lpBuffer[MAX_PATH];
    //dies liefert den Namen der Anwendung:
    GetModuleFileName(NULL, lpBuffer, sizeof(lpBuffer);
    //dies jedoch liefert den Namen der DLL
    GetModuleFileName(GetModuleHandle(_T("name_der_dll")), lpBuffer, sizeof(lpBuffer));
    


  • hm den richtigen pfad hab ich nu, aber er liest trotzdem immer nur den standardwert aus, was mach ich falsch?

    short XXX::loadIni()
    {
    char strPath[MAX_PATH]; 
    short cIniNumChannels;
    CString cstrPath;
    //Pfad der DLL ermitteln
    GetModuleFileName(GetModuleHandle(_T(DLL_NAME)), strPath, MAX_PATH);
    cstrPath = strPath;
    //Dateierweiterung abschneiden 
    int nPos = cstrPath.ReverseFind('\\');
    cstrPath = cstrPath.Mid(1, nPos-1);
    cstrPath += \\Settings.ini;
    //Wert auslesen
    cIniNumChannels = GetPrivateProfileIntA("config", "NUMCHANNLES", DEFAULT_NUMCHANNELS, cstrPath);
    return cIniNumChannels;
    }
    

    so schaut meine ini datei "Settings.ini" aus:
    [config]
    NUMCHANNLES=6

    die datei liegt auch im richtigen Verzeichnis



  • Der einfachste Weg ist die Module-Globale Variabele "__ImageBase" zu verwenden:

    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    
    extern "C" LPVOID __ImageBase;
    
    void Funktion_in_der_DLL
    {
      THAR szDllFileName[1024];
      GetModuleFileName((HMODULE) &__ImageBase, szDllFileName, 1024);
      _tprintf(_T("%p: %s"), &__ImageBase, szDllFileName);
    }
    


  • Titanico schrieb:

    CString cstrPath;
    cIniNumChannels = GetPrivateProfileIntA("config", "NUMCHANNLES", DEFAULT_NUMCHANNELS, cstrPath);
    

    Warum rufst Du hier "GetPrivateProfileIntA" auf? Damit musst Du dann aber überall ANSI Strings übergeben...
    Verwende doch das normale und mach es so:

    CString cstrPath;
    cIniNumChannels = GetPrivateProfileInt(_T("config"), _T("NUMCHANNLES"), DEFAULT_NUMCHANNELS, cstrPath);
    


  • danke jochen.

    trotzdem liest er immer nur de standardwert aus, kann im code aber keinen fehler finden...



  • geht doch so, war mein fehler, danke!


Log in to reply