c# 64bit pinvoke 32-bit user32

C#PInvoking user32.dll en un sistema de 64 bits



64bit pinvoke (2)

¿Es incorrecto pinvoke user32.dll en Windows de 64 bits, desde una aplicación de 64 bits? Lo he hecho con éxito varias veces y nunca he tenido un error, pero parece contradictorio. ¿Debo buscar user64.dll en su lugar?


No hay user64.dll por la misma razón que acaba de describir, el programa .net puede ser independiente de la arquitectura de la CPU, por lo que el mismo código debe funcionar en x86 y x64.
Si lleva su programa a la plataforma x86, aún se ejecutará sin ninguna modificación.
Supongo que cuando nombraron user32.dll no tenían esos escenarios en mente.


El nombre user32.dll es engañoso. Es la versión de 64 bits de user32.dll que estás llamando. La versión de 64 bits se encuentra en %windir%/System32/user32.dll .

Se incluye una versión de 32 bits para la compatibilidad con aplicaciones de 32 bits. Se encuentra en %windir%/SysWOW64/user32.dll . Puedes inspeccionarlos usando la utilidad dumpbin :

System32 / user32.dll:

FILE HEADER VALUES 8664 machine (x64)

SysWOW64 / user32.dll:

FILE HEADER VALUES 14C machine (x86)