Problème de refexion sur des assemblys en X86 sur un OS X64

moretl Messages postés 1 Date d'inscription vendredi 18 mars 2005 Statut Membre Dernière intervention 22 février 2010 - 22 févr. 2010 à 08:36
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 22 févr. 2010 à 20:22
Bonjour,
Je post ce message, car pas moyen de trouver de solutions dans d'autres posts.

Je rencontre la fameuse erreur "badformatimageexception" lorsque je fais de la reflexion sur une assembly compilée en X86 sur un OS en X64 (Win 7 en l'occurence).
Tous les posts que je trouve disent soit de lancer mon appli en X86, soit de compiler mon autre assembly en AnyCPU. Ces deux solutions sont impossibles car dans le premier cas, c'est mon mappeur (Telerik.Openaccess) qui fait des siennes, je suis donc obligé de lancer mon appli en AnyCPU. Pour la seconde, qui consiste à compiler mon autre assembly en AnyCPU, c'est aussi impossible, car j'utilise dedans la bibliothèque System.Data.OleDB qui n'est pas à ce jour disponible en X64, le seul moyen pour que mon assembly marche sur un OS X64 est de la compiler en X86 !!!
J'ai un bon gros chat qui se mord la queue !
J'oubliais, encore une contrainte : je ne peux pas utiliser la méthode ReflectionOnly car mon assembly doit s'exécuter, mais je ne peux le faire que par réflexion...

Selon moi, la seule solution qu'il me reste (à moins de m'en proposer une meilleure ou plus réaliste !) est de pouvoir forcer la reflexion en X86 malgré que cela s'execute sur un OS en 64... mais comment faire ???????

Une idée ? car là je cale ?????!!!!
Un grand merci d'avance à mes futurs sauveurs !

2 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 févr. 2010 à 09:56
Salut, je ne peux pas te répondre précisément sur ce problème de "Reflection" auquel je n'ai jamais été confronté, voilà ce que je peux t'expliquer sur les platformes, ça te donnera peut être une piste.

- Un processus x86 ne peut pas charger une librairie x64 et inversement.

- Un processus AnyCPU sera en x86 sur un Win32 bits et en x64 sur un Win64.

- Un processus x86 va tourner en WOW64 sur un Win64 (donc en 32 bits avec le framework 32 bits).

- Un processus x64 tourne en 64 bits sur Win64.

- sur Win64 les 2 frameworks sont installés, x86 + x64.

- Les versions Express de VS2008 ne permettent pas de choisir la cible de compilation, il faut soit modifier le fichier de projet soit utiliser le compilateur en ligne de commande.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
22 févr. 2010 à 20:22
car j'utilise dedans la bibliothèque System.Data.OleDB qui n'est pas à ce jour disponible en X64,

T'es vraiment sur ???
System.Data.OleDB est une assembly native du framework, qui, comme le framework, fonctionne parfaitement bien tant en x86 qu'en x64.

Ne serait-ce pas plutot du fait qu'à travers cette assembly, tu accede à une base de données Access 2003 ou inférieur, mettant donc en oeuvre le moteur Microsoft Jet 4.0, qui, lui, effectivement, n'est pas prevu pour fonctionner en x64.

Si tu change de BDD pour une ne nécessitant pas MSJet 4.0 tu constatera que System.Data.OleDB fonctionne parfaitement en x64.
Je n'ai personnellement jamais rencontré de problèmes


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
Rejoignez-nous