C# PInvoking user32.dll on a 64 bit system
32-bit, 64-bit, c#, pinvoke, user32
Solution
The name `user32.dll` is misleading. It's the 64 bit version of `user32.dll` you're calling. The 64 bit version is located at `%windir%\System32\user32.dll`.
A 32-bit version is included for compatibility with 32-bit applications. It's located at `%windir%\SysWOW64\user32.dll`. You can inspect them using the `dumpbin` utility:
System32\user32.dll:
FILE HEADER VALUES
8664 machine (x64)
SysWOW64\user32.dll:
FILE HEADER VALUES
14C machine (x86)
Problem
Is it wrong to pinvoke user32.dll on 64 bit Windows, from a 64 bit app? I've done this successfully a number of times and never had an error, but it seems contradictory. Should I look for user64.dll instead?