Sto chiamando funzioni da una DLL non gestita a 32 bit su un sistema a 64 bit. Quello che ottengo è:
BadImageFormatException: È stato fatto un tentativo di caricare un programma con un formato non corretto. (Eccezione da HRESULT: 0x8007000B)
All'inizio, avevo i miei progetti impostati sulla piattaforma Any CPU, quindi li ho cambiati entrambi in x86, ma questo errore si verifica ancora. Questa è davvero l'unica correzione che conosco per questo.
Le DLL non sono corrotte o altro, perché posso usarle con altri programmi (di cui non ho la fonte). Ho pensato che forse non trovava una dipendenza, ma ho controllato e ci sono tutte. Inoltre, non dovrebbe lanciare una DllNotFoundException
in questo caso?
Cos'altro posso fare? E prima che tu dica "Usa invece una DLL non gestita a 64 bit," lasciami sottolineare che non ce n'è una. ;)
Se cercate di eseguire applicazioni a 32 bit su IIS 7 (e/o su una macchina con sistema operativo a 64 bit), otterrete lo stesso errore. Quindi, da IIS 7, cliccate con il tasto destro del mouse su applications' application pool e andate su "advanced settings" e cambiate "Enable 32-Bit Applications" a "TRUE".
Riavvia il tuo sito web e dovrebbe funzionare.
In qualche modo, la casella di controllo Build nel Configuration Manager era stata deselezionata per il mio eseguibile, quindi era ancora in esecuzione con la vecchia build Any CPU. Dopo aver risolto il problema, Visual Studio si è lamentato che non poteva eseguire il debug dell'assembly, ma questo è stato risolto con un riavvio.
Ho appena avuto anche questo problema. Ho provato tutti i suggerimenti qui, ma non mi hanno aiutato.
Ho trovato un'altra cosa da controllare che mi ha risolto il problema. In Visual Studio, fai clic destro sul progetto e apri "Proprietà". Clicca sulla scheda "Compile" (o "Build") e poi clicca su "Advanced Compile Options" in basso.
Controlla il menu a tendina "Target CPU". Dovrebbe corrispondere alla "Piattaforma" che state costruendo. Cioè, se state costruendo "Any CPU" allora "Target CPU" dovrebbe dire "Any CPU". Passate attraverso tutte le vostre piattaforme rendendole attive e controllate questa impostazione.