Καλώ συναρτήσεις από ένα μη διαχειριζόμενο DLL 32-bit σε ένα σύστημα 64-bit. Αυτό που λαμβάνω είναι: Αυτό που λαμβάνω είναι:
BadImageFormatException: Προσπάθησε να φορτωθεί ένα πρόγραμμα με λανθασμένη μορφή. (Εξαίρεση από HRESULT: 0x8007000B)
Στην αρχή, είχα τα έργα μου ρυθμισμένα στην πλατφόρμα Any CPU, οπότε τα άλλαξα και τα δύο σε x86, αλλά αυτό το σφάλμα εξακολουθεί να εμφανίζεται. Αυτή είναι πραγματικά η μόνη λύση που γνωρίζω γι' αυτό.
Τα DLLs δεν είναι κατεστραμμένα ή οτιδήποτε άλλο, επειδή μπορώ να τα χρησιμοποιήσω με άλλα προγράμματα (που δεν έχω την πηγή τους). Σκέφτηκα ότι ίσως δεν έβρισκε κάποια εξάρτηση, αλλά το έλεγξα και είναι όλα εκεί. Επιπλέον, δεν θα μπορούσε να πετάξει μια DllNotFoundException
σε αυτή την περίπτωση;
Τι άλλο μπορώ να κάνω; Και πριν πείτε "Χρησιμοποιήστε ένα 64-bit unmanaged DLL αντί," επιτρέψτε μου να επισημάνω ότι δεν υπάρχει τέτοιο. ;)
Αν προσπαθήσετε να εκτελέσετε εφαρμογές 32-bit σε IIS 7 (ή/και σε μηχάνημα με λειτουργικό σύστημα 64-bit), θα λάβετε το ίδιο σφάλμα. Έτσι, από το IIS 7, κάντε δεξί κλικ στο applications' application pool και μεταβείτε στο "advanced settings" και αλλάξτε το "Enable 32-Bit Applications" σε "TRUE".
Επανεκκινήστε τον ιστότοπό σας και θα πρέπει να λειτουργήσει.
Με κάποιο τρόπο, το πλαίσιο ελέγχου Build στο Configuration Manager είχε απενεργοποιηθεί για το εκτελέσιμο αρχείο μου, οπότε εξακολουθούσε να εκτελείται με την παλιά έκδοση Any CPU build. Αφού το διόρθωσα αυτό, το Visual Studio παραπονέθηκε ότι δεν μπορούσε να αποσφαλματώσει τη συναρμολόγηση, αλλά αυτό διορθώθηκε με μια επανεκκίνηση.
Μόλις είχα κι εγώ αυτό το πρόβλημα. Δοκίμασα όλες τις προτάσεις εδώ, αλλά δεν βοήθησαν.
Βρήκα ένα άλλο πράγμα που πρέπει να ελέγξω, το οποίο το διόρθωσε για μένα. Στο Visual Studio, κάντε δεξί κλικ στο έργο και ανοίξτε το "Properties". Κάντε κλικ στην καρτέλα "Compile" (ή "Build") και στη συνέχεια κάντε κλικ στο "Advanced Compile Options" στο κάτω μέρος.
Ελέγξτε το αναπτυσσόμενο πλαίσιο "Target CPU". Θα πρέπει να ταιριάζει με την "Πλατφόρμα" που κατασκευάζετε. Δηλαδή, αν κατασκευάζετε "Any CPU" τότε το "Target CPU" θα πρέπει να λέει "Any CPU". Ελέγξτε όλες τις πλατφόρμες σας κάνοντάς τες ενεργές και ελέγξτε αυτή τη ρύθμιση.