none
C#: DLL-Import schlägt fehl, obwohl DLL vorhanden ist RRS feed

  • Frage

  • Hallo zusammen,

    ich möchte den MemBrain-Wrapper (http://www.membrain-nn.de/german/download_de.htm) in meinem Programm einbinden. Dieser greift intern per DllImport auf die MemBrain-Dll zu. Dabei kommt es immer zur System.DllNotFoundException (Die DLL "MemBrainDll.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.), obwohl die Dll (sowohl in der 32-bit- als auch in der 64-bit-Version) laut Windows-Explorer im Verzeichnis C:\Windows\System32\ liegt. Zudem habe ich zur Sicherheit dieselben Dateien in den Projektordner gelegt.

    Was mache ich falsch?

    Vielen Dank im Vorraus und viele Grüße,

    Julian

    Dienstag, 18. August 2015 10:01

Antworten

Alle Antworten

  • Hallo Julian,

    Leg die Datei mal im C:\Windows\SysWOW64\ Ordner ab.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Julian Aßmann Dienstag, 18. August 2015 10:21
    • Tag als Antwort aufgehoben Julian Aßmann Dienstag, 18. August 2015 10:21
    • Als Antwort markiert Julian Aßmann Dienstag, 18. August 2015 10:23
    Dienstag, 18. August 2015 10:18
    Moderator
  • Hallo Stefan,

    vielen vielen Dank, das hat geholfen. Jetzt will ich es nur noch verstehen. Ich hatte davor in meinem Programm eine Überprüfung eingabaut, ob die Datei im Ordner C:\Windows\System32\ liegt, die Abfrage ergab immer false, jetzt true. Wie hängen die Ordner miteinander zusammen? Sind das nur Links oder was?

    Über eine Antwort würde ich mich sehr freuen, damit ich das verstehe.

    Vielen Dank nochmal,

    Julian

    Dienstag, 18. August 2015 10:23
  • Hallo Julian,

    Windows mappt Zugriffe auf den System32 Ordner für 32 Bit Prozesse automatisch. Die Anwendung selbst bekommt davon nichts mit, für sie sieht es so aus als ob es der "richtige" System32 Ordner wäre, in Wahrheit ist es bei 32 Bit Prozessen aber eben der SysWOW64 Ordner.

    Siehe dazu auch:

      https://de.wikipedia.org/wiki/WOW64

    Für die Registry gilt übrigens ähnliches, dort gibt es u.a. einen "WOW6432Node" Abschnitt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Dienstag, 18. August 2015 10:52
    Moderator