我像这样使用 GetWindowLong :

[DllImport("user32.dll")]
private static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex);

但是根据MSDN文档,我应该使用GetWindowLongPtr来实现64位兼容。
http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx

GetWindowLongPtr 的 MSDN 文档说我应该这样定义它(在 C++ 中):
LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex);

我曾经使用 IntPtr 作为返回类型,但我到底会用什么来作为 LONG_PTR 的等价物?我还看到 GetWindowLong 在 C# 中定义为:
[DllImport("user32.dll")]
private static extern long GetWindowLong(IntPtr hWnd, int nIndex);

什么是正确的,我如何确保正确的 64 位兼容性?

最佳答案

不幸的是,这并不容易,因为 GetWindowLongPtr 在 32 位 Windows 中不存在。在 32 位系统上,GetWindowLongPtr 只是一个指向 GetWindowLong 的 C 宏。如果您确实需要在 32 位和 64 位系统上使用 GetWindowLongPtr,则必须确定在运行时调用的正确方法。请参阅 pinvoke.net 处的说明

10-06 14:24