DLL Pfad ermitteln / Konflikt mit Exe



  • Hallo,

    ich habe ein kleines Problem. Ich muss aus meiner DLL eine andere DLL aufrufen. Da meine DLL auch in VB oder anderen Umgebungen eingesetzt werden kann fängt hier das Problem an.

    Mit den bekannten Methoden versuche ich den Pfad bzw. Dateinamen zu bekommen. Mit den herkömmlichen Methoden bekomme ich aber immer nur den Namen / PFad zu der Exe Datei die meine DLL nutzt. Da aber die Exe und die DLL in unterschiedlichen Pfaden liegen können und die SUbDLl die ich aus der DLL laden muss, im Verzeichnis der DLL liegt, möchte ich gerne den Pfad der activen DLL, anstatt der activen Exe, bekommen.

    Kann mir da jemand helfen?

    Gruß

    Ocrana



  • GetModuleFileName



  • Mit den herkömmlichen Methoden bekomme ich aber immer nur den Namen / PFad zu der Exe Datei die meine DLL nutzt.

    hmm... die herkömmliche methode ist für mich GetModuleFileName (hat überigends nen sehr interessanten 1. parameter das ding).



  • Nunja, wenn ich nicht die Beschreibung so unsauber gemacht hätte, würde ich denken es wäre hier ein Rateforum... "Da gibt es was, such doch mal".... 🤡

    Naja ich denke ich habe es ein wenig falsch umschrieben. Also...ich habe eine StaticLib. Diese StaticLib ruft ein externes Modul auf. Im Moment einfach mit LoadLibrary.
    So, jetzt baue ich die Lib in eine DLL oder auch OCX ein. Schön ist es bei der OCX zu sehen. Ist egal wie ich die GetModuleFileName aufrufe (NULL, AfxGetApp()->m_hInstance und alles was die KnowledgeBase sonst so hergibt) bekomme ich alleine schon beim registrieren immer und immer wieder die schöne Meldung das der Module Filename der "...../resvr32.exe" ist. Wenn ich die OCX dann nutze, dementsprechend den Dateinamen der Exe.

    Es müsste doch einen Weg geben, den Pfad der OCX zu bekommen und nicht nur der EXe die die OCX lädt?

    Gruß

    Ocrana



  • Deine Beiträge sind echt schwer zu verstehen.

    Wenn du das Modul-Handle der DLL hast (kriegst du mit LoadLibrary), kannst du es bei GetModuleFileName benutzen.



  • Jo bin nicht gut im Beschreiben (und im Coden)...sorry.

    Also, das Modulhandle habe ich Maximal von der OCX. Dieses könnte ich als Parameter an die StaticLib schicken, und mit Hilfe des Handles arbeiten. Mein Ziel war es aber dieses Handle ohne zusätzliche Parameter aus der TSaticLib zu bekommen.

    Ocrana



  • vielleicht mit GetModuleHandle



  • Naja, vielleicht will es ja jemand wissen. Mit diesem Weg bekommt man in der OCX den Pfad/Namen der OCX und kann damit arbeiten.

    MEMORY_BASIC_INFORMATION mbi;
    		static int dummy;
    		VirtualQuery( &dummy, &mbi, sizeof(mbi) );
    		DWORD hMod = (DWORD)mbi.AllocationBase;
    		TCHAR szPath[MAX_PATH];
    		CString RtnVal;
    		GetModuleFileName( (HMODULE)hMod, szPath, sizeof(szPath) );
    		RtnVal = szPath;
    		RtnVal = RtnVal.Left(RtnVal.ReverseFind('\\'));
    		RtnVal += _T("\\meine.dll");
    

    Gibt ja zum Glück noch andere Quellen :p

    Gruß

    Ocrana



  • Wenn du den Namen deiner DLL/OCX kennst dann würd ich aber lieber GetModuleHandle benutzen.



  • Naja, das bringt nicht viel. Den Namen der OCX weiss ich. Aber ich weiss nicht wo der liegt. Er kann überall im System sein und ggf. der Name geändert sein.

    Resultat ist, das ich zwar den Namen der DLL weiss die ich aus der OCX laden will, aber um die korrekt zu laden muss ich den Pfad der OCX wissen, denn mit allen bisher getesteten Funktionen (bis auf dei genannte) bekomme ich in z.B. VB oder C# immer den Pfad der IDE und nicht der OCX. Und somit crasht es wenn ich nur ein einfaches LoadLibrary mache.


Anmelden zum Antworten