Frage
Ich bin ein C # mit (.NET 3.5, VS2005 Professional) Anwendung, die in C / C ++ geschrieben unmanaged 32-Bit-Bibliothek verwendet. API, die ich ist wie folgt verwendet werden:
void * Initialisieren (int x);
voic GetData (void *);
Und das funktioniert, wenn ich es auf Windows XP 32-Bit laufen, aber auf Windows XP64bit es wirft Ausnahme:
Unbehandelte Ausnahme: System.Reflection.TargetInvocationException: Ausnahme wurde durch das Ziel für einen Aufruf ausgelöst wurde. ---> System.BadImageFormatException: Es wurde versucht, ein Programm mit einem falschen Format zu laden. (Ausnahme von HRESULT: 0x8007000B) bei Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 DIM) bei Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()
Diese nicht verwalteten DLL Arbeit unter 64-Bit-XP, wenn sie von 32-Bit genannt unmanages Anwendung writetn in C / C ++.
Hat jemand eine Idee?
Lösung
Ihre Build-Konfiguration Platform wird auf ‚Any CPU‘ festgelegt, die auf einem 64-Bit-OS bedeutet es als 64-Bit läuft und Sie die DLL nicht laden kann. Stellen Sie es stattdessen auf x86, das wird es zwingen, als 32-Bit zu laufen, unabhängig von Betriebssystem und Ihre DLL lädt in Ordnung.
Andere Tipps
Es klingt wie Ihre DLL nur auf 32-Bit kompiliert werden, aber sie versuchen, es zu nennen sowohl von einem 32-Bit und 64-Bit-Prozess. Erstere wird arbeiten, natürlich. Die später jedoch nicht. 32-Bit-DLLs können nur in 32-Bit-Prozessen verwendet werden. Versuchen Sie, die DLL zu einem 64-Bit-Ziel Kompilieren und lassen Sie die C # app, dass man verwenden.
Alle Parameter überprüfen, die als Int32 definiert sind, dass IntPtr in der Tat sein sollte.