2010-04-09 5 views
0

J'ai une application .NET qui dépend d'une DLL native. J'ai l'application .NET définie comme AnyCPU. Dans l'étape de post-construction, je prévois de copier la DLL native correcte à partir de certains répertoires (x86 ou AMD64) et de la placer dans le chemin cible.Application .NET utilisant une DLL native (gestion de la construction)

Cependant, cela ne fonctionne pas. Sur une machine 64 bits, la variable d'environnement PROCESSOR_ARCHITECTURE est "x86" dans Visual Studio.

Mon alternative en ce moment est de créer un petit outil qui produit l'architecture du processeur. Cela sera utilisé par l'étape de post-construction.

Existe-t-il une meilleure alternative? Remarque: lorsque vous déployez/empaquetez l'application, la bonne DLL native est copiée sur la bonne plate-forme, ce qui signifie que nous avons deux dossiers de version distincts pour x86 et AMD64, ce qui est OK puisque c'est pour un pilote de périphérique L'application est un outil utilitaire pour le pilote).

Répondre

2

Visual Studio est une application 32 bits et fonctionne donc dans la couche WoW64 sur les systèmes 64 bits. Je suppose que c'est pourquoi PROCESSOR_ARCHITECTURE produit "x86" là - compatibilité: l'application devrait vraiment penser que c'est un système 32 bits.

Vous pouvez vérifier la présence et la valeur de la variable PROCESSOR_ARCHITEW6432, qui sera AMD64 même si l'application réelle est exécutée sous WoW64. Notez que cette variable n'existe pas sur Windows 32 bits et n'est pas non plus définie pour les processus 64 bits sur Windows 64 bits.

Questions connexes