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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top