Volám funkcie z 32-bitovej nespravovanej knižnice DLL v 64-bitovom systéme. Dostávam nasledovné:
BadImageFormatException: Bolo vykonané načítanie programu s nesprávnym formátom. (Výnimka z HRESULT: 0x8007000B)
Najprv som mal projekty nastavené na platformu Any CPU, tak som ich oba zmenil na x86, ale táto chyba sa stále vyskytuje. To je naozaj jediná oprava, ktorú na to poznám.
DLL nie sú poškodené ani nič podobné, pretože ich môžem používať s inými programami (ku ktorým nemám zdrojové kódy). Myslel som si, že to možno nenašlo závislosť, ale skontroloval som to a všetky tam sú. Navyše, nevyhodilo by to v takom prípade DllNotFoundException
?
Čo môžem ešte urobiť? A skôr než poviete "Použite namiesto toho 64-bitovú nespravovanú DLL," dovoľte mi upozorniť, že žiadna taká neexistuje. ;)
Ak sa pokúsite spustiť 32-bitové aplikácie v službe IIS 7 (a/alebo v 64-bitovom počítači s OS), zobrazí sa rovnaká chyba. Preto v systéme IIS 7 kliknite pravým tlačidlom myši na fond aplikácií' a prejdite na "advanced settings" a zmeňte "Enable 32-Bit Applications" na "TRUE".
Reštartujte webovú stránku a malo by to fungovať.
V Správcovi konfigurácie bolo pre môj spustiteľný súbor nejakým spôsobom zrušené začiarknutie políčka Build, takže bol stále spustený so starým zostavením Any CPU. Keď som to opravil, Visual Studio sa sťažovalo, že nemôže ladiť zostavu, ale to sa napravilo reštartom.
Tento problém som mal aj ja. Vyskúšal som všetky tu uvedené návrhy, ale nepomohli.
Našiel som ďalšiu vec na kontrolu, ktorá mi to vyriešila. Vo Visual Studiu kliknite pravým tlačidlom myši na projekt a otvorte "Properties". Kliknite na záložku "Compile" (alebo "Build") a potom kliknite na "Advanced Compile Options" v spodnej časti.
Začiarknite rozbaľovaciu ponuku "Target CPU". Mal by zodpovedať "Platforme", ktorú zostavujete. To znamená, že ak vytvárate "Any CPU", potom "Target CPU" by malo byť uvedené "Any CPU". Prejdite všetky svoje Platformy tak, že ich urobíte aktívnymi a skontrolujete toto nastavenie.