C # PInvoking user32.dll sur un système 64 bits
Question
Est-il tort de Pinvoke user32.dll sur 64 bits de Windows, à partir d'une application 64 bits? Je l'ai fait avec succès un certain nombre de fois et n'a jamais eu une erreur, mais il semble contradictoire. Dois-je chercher user64.dll à la place?
La solution
Le user32.dll
nom est trompeur. Il est la version 64 bits de user32.dll
que vous appelez. La version 64 bits est située à %windir%\System32\user32.dll
.
Une version 32 bits est inclus pour assurer la compatibilité avec les applications 32 bits. Il est situé à %windir%\SysWOW64\user32.dll
. Vous pouvez les consulter à l'aide de l'utilitaire dumpbin
:
System32 \ user32.dll:
FILE HEADER VALUES
8664 machine (x64)
SysWOW64 \ user32.dll:
FILE HEADER VALUES
14C machine (x86)
Autres conseils
Il n'y a pas user64.dll pour exactement la même raison que vous décrivez juste, programme .net peut être agnostique à l'architecture cpu, le même code doit fonctionner sur x86 et x64.
Si vous prenez votre programme pour la plate-forme x86, il continue à fonctionner sans aucune modification.
Je suppose que, quand ils ont appelé user32.dll ne pas avoir ces scénarios à l'esprit.