Question

J'ai une application C # (.NET 3.5, VS2005 Professional) qui utilise la bibliothèque 32 bits non géré écrit en C / C ++. API que j'utilise est comme ceci:

void * Initialize (int x);

voic GetData (void *);

Et cela fonctionne quand je le lance sur Windows XP 32 bits, mais sous Windows XP64bit il émet une exception:

Exception non gérée: System.Reflection.TargetInvocationException: Exception a été levée par la cible d'un appel. ---> System.BadImageFormatException: Tentative de chargement d'un programme avec un format incorrect. (Exception de HRESULT: 0x8007000B)  à Aktuelizator.CommonLibrary.InitializeRingBuffer (Int32 dim)  à Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor ()

Ces travaux non géré DLL sous XP 64bit est appelé depuis 32 bits unmanages writetn d'application en C / C ++.

Est-ce que quelqu'un a une idée?

Était-ce utile?

La solution

Votre configuration build plate-forme est réglée sur « Any CPU », cela signifie que sur un système d'exploitation 64 bits, il fonctionne comme 64 bits et vous ne pouvez pas charger la dll. Réglez-le à la place x86, cela forcera à courir comme 32 bits quel que soit votre système d'exploitation et dll chargera bien.

Autres conseils

Il semble que votre DLL est uniquement compilé 32 bits, mais vous essayez de l'appeler à la fois un 32 bits et 64 bits processus. L'ancien fonctionnera, bien sûr. Cependant, le plus tard, ne sera pas. 32 dll bits ne peuvent être utilisés dans 32 processus de bits. Essayez de compiler la DLL à une cible de 64 bits et laisser l'application C # utiliser celui-ci.

Vérifier tous les paramètres qui sont définis comme Int32, qui devrait en fait IntPtr.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top