I am trying to use GetWindowLongPtrA
but I keep getting the "Unable to find an entry point named 'GetWindowLongPtrA' in DLL 'user32.dll'". (also SetWindowLongPtrA
getting the same error). I've tried many solutions found on Google, but they didn't solve it.
Here is the declaration of the function I've written:
[DllImport("user32.dll")]
public static extern IntPtr GetWindowLongPtrA(IntPtr hWnd, int nIndex);
Tried to put EntryPoint = "GetWindowLongPtrA"
, changed GetWindowLongPtrA
to GetWindowLongPtr
, put CharSet = CharSet.Ansi
, switched to GetWindowLongPtrW
with CharSet = CharSet.Unicode
etc., They all didn't work.
My computer is exactly "64-bit" (but cannot call that 64-bit WinAPI function?). the OS is Windows 10.
But my system drive is running out of free space. Is this a possible cause?
What is the solution for this problem?
There is no function named
GetWindowLongPtr
,GetWindowLongPtrA
orGetWindowLongPtrW
in the 32-bit version ofuser32.dll
:The reason that using
GetWindowLongPtr
regardless of target bitness works C and C++ WinAPI code is that in 32-bit code it's a macro that callsGetWindowLong(A|W)
. It only exists in the 64-bit version ofuser32.dll
:The documentation for importing
GetWindowLongPtr
on pinvoke.net includes a code sample for how to make this importation transparent to target bitness (remember, the error is thrown when you actually try to call the imported function that doesn't exist, not on theDllImport
line):