views:

247

answers:

1

If you make a little research on the internet you'll see many DLLImport styles for this user32.dll function:

HDC GetDC(HWND hWnd);

The question is: what type is more appropriate for .NET x64 apps (either compiled with the Platform target as AnyCPU on a x64 machine or specifically as x64)? IntPtr for example grows to a size of 8 on a x64 process, can this be a problem? Is uint more appropriate than Uint64? What is the size of the pointers this function uses when used in a x64 process? The DLL is called user32.dll does it work as 32bit or 64bit on a x64 operating system?

[DllImport("user32.dll",EntryPoint="GetDC")]
public static extern IntPtr GetDC(IntPtr hWnd);
public static extern uint GetDC(uint hWnd);
public static extern int GetDC(int hWnd);

Thanks!

+1  A: 

You should represent handles (including HDC and HWND) by IntPtr. This still works on a x64 system: although IntPtr is 8 bytes and the DLL is called User32.dll, the handle size still matches the IntPtr size.

itowlson