Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# PInvoking user32.dll on a 64 bit system

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?

like image 399
James Cadd Avatar asked Oct 08 '09 22:10

James Cadd


2 Answers

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) 
like image 156
mmx Avatar answered Sep 19 '22 20:09

mmx


There is no user64.dll for the exact same reason you just described, .NET program can be agnostic to CPU architecture so the same code needs to work on x86 and x64.
If you take your program to x86 platform, it will still run without any modifications.
I guess that when they named user32.dll, they didn't have those scenarios in mind.

like image 21
Shay Erlichmen Avatar answered Sep 20 '22 20:09

Shay Erlichmen