Domanda

Ho un C # (.NET 3.5, VS2005 Professional) applicazione che utilizza la libreria a 32 bit non gestito scritto in C / C ++. API che uso è simile a questo:

void * Initialize (int x);

voic GetData (void *);

E questo funziona quando l'eseguo su Windows XP a 32 bit, ma su Windows XP64bit getta eccezione:

Eccezione non gestita: System.Reflection.TargetInvocationException: eccezione è stata generata dalla destinazione di una chiamata. ---> System.BadImageFormatException: Si è tentato di caricare un programma con un formato non corretto. (Eccezione da HRESULT: 0x8007000B)  a Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 dim)  a Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()

Questi non gestito il lavoro di DLL sotto 64bit XP quando chiamato da 32bit unmanages writetn applicazioni in C / C ++.

Qualcuno ha qualche idea?

È stato utile?

Soluzione

Il tuo Piattaforma configurazione di generazione è impostata su 'Qualsiasi CPU', che significa su un sistema operativo a 64 bit viene eseguito come 64 bit e non è possibile caricare la DLL. Impostare invece a 86, questo costringerà a correre come a 32 bit a prescindere dal sistema operativo e la DLL caricherà bene.

Altri suggerimenti

Sembra che la DLL viene compilata solo a 32 bit, ma si tenta di chiamare da entrambi a 32 bit e di processo a 64 bit. Il primo funziona, naturalmente. Più tardi, però, non lo faranno. 32 DLL bit possono essere utilizzati solo in 32 processi bit. Provare a compilare la DLL a un target a 64 bit e lasciare che il C # app usare quello.

Controlla tutti i parametri che sono definiti come Int32, che dovrebbe in realtà essere IntPtr.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top