I want to P/Invoke to GetWindowLongPtr and SetWindowLongPtr, and I\'m seeing conflicting information about them.
Some sources say that, on 32-bit platforms, GetWindo
C:\Program Files\Microsoft SDKs\Windows\v7.0A\IncludeSetWindowLongPtr/GetWindowLongPtr._WIN64 is defined, they are functions; when it's not, they are #define'd to SetWindowLong/GetWindowLong.This implies that 32-bit OSes may not have SetWindowLongPtr/GetWindowLongPtr as an actual function, so it would appear that the comment on pinvoke.net is correct.
Update (more clarification on _WIN64):
_WIN64 is defined by the C/C++ compiler when compiling 64-bit code (that will only run on a 64-bit OS). So this means that any 64-bit code using SetWindowLongPtr/GetWindowLongPtr will use the actual functions, but any 32-bit code using them will use SetWindowLong/GetWindowLong instead. This includes 32-bit code running on a 64-bit OS.
To emulate the same behavior in C#, I recommend checking IntPtr.Size as done by pinvoke.net; that tells you whether you're running 32-bit or 64-bit code. (Keeping in mind that 32-bit code may run on a 64-bit OS). Using IntPtr.Size in managed code emulates the same behavior as _WIN64 does for native code.