我不断收到“无法在DLL'user32.dll'中找到名为'GetWindowLongPtrA'的入口点”

arm*_*oyl 2 .net c# pinvoke winapi getwindowlong

我正在尝试使用,GetWindowLongPtrA但我一直收到“无法在DLL'user32.dll'中找到名为'GetWindowLongPtrA'的入口点”。(也会SetWindowLongPtrA出现相同的错误)。我已经尝试了许多在Google上找到的解决方案,但是他们没有解决。

这是我编写的函数的声明:

[DllImport("user32.dll")]
public static extern IntPtr GetWindowLongPtrA(IntPtr hWnd, int nIndex);
Run Code Online (Sandbox Code Playgroud)

尝试将put EntryPoint = "GetWindowLongPtrA",更改GetWindowLongPtrAGetWindowLongPtr,put CharSet = CharSet.Ansi,切换为GetWindowLongPtrWwith CharSet = CharSet.Unicode等,它们都不起作用。

我的计算机正好是“ 64位”(但是不能调用该64位WinAPI函数吗?)。操作系统是Windows 10。

[1]:https://i.stack.imgur.com/3JrGw.png

但是我的系统驱动器的可用空间不足。这可能是原因吗? 在此处输入图片说明

这个问题有什么解决方案?

Gov*_*mar 5

没有命名的函数GetWindowLongPtrGetWindowLongPtrAGetWindowLongPtrW在32位版本user32.dll

32位user32.dll

GetWindowLongPtr无论使用哪种目标位数,都可以使用C和C ++ WinAPI代码的原因是,在32位代码中,它是一个调用的宏GetWindowLong(A|W)。它仅存在于64位版本的中user32.dll

64位user32.dll

GetWindowLongPtrpinvoke.net上进行导入的文档包括一个代码示例,用于说明如何使此导入对目标位透明(请记住,当您实际上尝试调用不存在的,不在DllImport网上的导入函数时,会引发错误):

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

[DllImport("user32.dll", EntryPoint="GetWindowLongPtr")]
private static extern IntPtr GetWindowLongPtr64(IntPtr hWnd, int nIndex);

// This static method is required because Win32 does not support
// GetWindowLongPtr directly
public static IntPtr GetWindowLongPtr(IntPtr hWnd, int nIndex)
{
     if (IntPtr.Size == 8)
     return GetWindowLongPtr64(hWnd, nIndex);
     else
     return GetWindowLongPtr32(hWnd, nIndex);
}
Run Code Online (Sandbox Code Playgroud)