Ich rufe Funktionen von einer 32-Bit unmanaged DLL auf einem 64-Bit-System. Was ich bekomme ist:
BadImageFormatException: Es wurde versucht, ein Programm mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B)
Zuerst hatte ich meine Projekte auf die Plattform Any CPU eingestellt, also änderte ich sie beide auf x86, aber dieser Fehler tritt immer noch auf. Das ist wirklich die einzige Lösung, die ich dafür kenne.
Die DLLs sind nicht beschädigt oder so, denn ich kann sie mit anderen Programmen verwenden (für die ich den Quellcode nicht habe). Ich dachte, dass es vielleicht eine Abhängigkeit nicht findet, aber ich habe es überprüft und sie sind alle da. Außerdem, würde es in diesem Fall nicht eine "DllNotFoundException" auslösen?
Was kann ich sonst noch tun? Und bevor Sie sagen: "Verwenden Sie stattdessen eine nicht verwaltete 64-Bit-DLL", lassen Sie mich darauf hinweisen, dass es keine gibt ;)
Wenn Sie versuchen, 32-Bit-Anwendungen auf IIS 7 (und/oder einem 64-Bit-Betriebssystem) auszuführen, erhalten Sie denselben Fehler. Klicken Sie also im IIS 7 mit der rechten Maustaste auf den Anwendungspool und gehen Sie zu "Erweiterte Einstellungen" und ändern Sie "32-Bit-Anwendungen aktivieren" auf "WAHR".
Starten Sie Ihre Website neu und es sollte funktionieren.
Irgendwie war das Kontrollkästchen Build im Konfigurationsmanager für meine ausführbare Datei nicht aktiviert worden, so dass sie immer noch mit dem alten Any-CPU-Build ausgeführt wurde. Nachdem ich das behoben hatte, beschwerte sich Visual Studio, dass es die Assembly nicht debuggen konnte, aber das war mit einem Neustart behoben.
Ich hatte gerade dieses Problem auch. Versucht, alle Vorschläge hier, aber sie didn & #39; t helfen.
Ich habe eine weitere Möglichkeit gefunden, die das Problem für mich behoben hat. Klicken Sie in Visual Studio mit der rechten Maustaste auf das Projekt und öffnen Sie "Eigenschaften". Klicken Sie auf die Registerkarte "Kompilieren" (oder "Erstellen") und dann auf "Erweiterte Kompilieroptionen" am unteren Rand.
Überprüfen Sie das Dropdown-Menü "Target CPU". Es sollte mit der "Plattform" übereinstimmen, die Sie erstellen. Das heißt, wenn Sie "Any CPU" bauen, dann sollte "Target CPU" "Any CPU" heißen. Gehen Sie alle Ihre Plattformen durch, indem Sie sie aktivieren, und überprüfen Sie diese Einstellung.