none
C++/CLI Assembly findet seine C-Dll-Abhängigkeiten nicht RRS feed

  • Frage

  • Hallo NG,

    Ich habe eine C# Applikation die eine von mir geschriebene C++/CLI Assembly nutzt die native C Dlls (3rd Party) "wrappt".
    Die C Dlls sind über Libraries eingebunden.

    Die Applikation liegt mit der C++/CLI Assembly und den C Dlls in einem Verzeichnis.
    Die Applikation läuft auch ohne Probleme und findet die Abhängigkeiten.

    Jetzt aber mein Problem, starte ich die Applikation aus einem anderen Working Directory heraus (im speziellen über Shell Open Command, durch Doppelklick auf eine assoziierte Datei im Explorer) findet die C++/CLI Assembly nicht mehr die C Dlls.

    Lege ich die C Dlls z.B. in C:\Windows\System32 oder füge meinen Applikationspfad in $PATH Variable hinzu funktioniert es.

    Gefallen tut mir das allerdings nicht. 

    Warum sucht das System nicht erst im "Applikationspfad" (siehe http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx#standard_search_order_for_desktop_applications).

    Ich vermute ich interpretiere "The directory from which the application loaded." falsch.

    Was wäre die Lösung des Problems ? 


    Dienstag, 21. Oktober 2014 07:35

Alle Antworten

  • Hallo Markus,

    Wenn Du dem standardmäßigen Suchpfad (aus dem Link) ein anderes Suchpfad vorziehst, kannst Du die Funktion LoadLibraryEx() verwenden. Wenn die Dlls immer aus dem Applikationspfad (wo sie installiert wurde) geladen werden müssen, kann als drittes Parameter LOAD_LIBRARY_SEARCH_APPLICATION_DIR angegeben werden. Wenn aber Dein Ziel ist, dass die Dlls wie bisher aus dem System32 Ordner geladen werden können, aber zudem auch das Applikationspfad gesucht wird, kannst Du mit LOAD_LIBRARY_SEARCH_DEFAULT_DIRS probieren.

    Siehe dazu: LoadLibraryEx function

    LoadLibrary() ist die vereinfachte Variante ohne Flags, deshalb sucht sie im standardmäßigen Suchpfad.

    Grüße,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.




    Mittwoch, 22. Oktober 2014 06:40
    Administrator
  • Hallo Dimitar,

    Wie interpretierst du "The directory from which the application loaded" ?

    Eigentlich würde ich sagen das ist das Verzeichnis wo die C# Applikation, der C++/CLI Wrapper und die C DLLs liegen.

    Die C# Applikation findet dort auch die C++/CLI Wrapper Assembly. Die C++/CLI Assembly wieder rum aber nicht die C Dlls. Scheinbar greift hier nur das aktuelle "Working Directory".

    Ich lade die C Dlls aktuell nicht per LoadLibrary, diese werden über Libraries (3rd Party) geladen.

    Du meinst um eine Anpassung des C++/CLI Wrappers komme ich nicht herum ?

    Gruß
    Markus

    Mittwoch, 22. Oktober 2014 10:16
  • Hallo Markus

    Du meinst um eine Anpassung des C++/CLI Wrappers komme ich nicht herum ?

    Nein, das habe ich nicht gemeint. Tut mir leid, wenn es so geklungen hat.

    Ich lade die C Dlls aktuell nicht per LoadLibrary, diese werden über Libraries (3rd Party) geladen.

    Alles klar.

    Gruß
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Donnerstag, 23. Oktober 2014 07:00
    Administrator