【发布时间】:2019-02-22 19:36:07
【问题描述】:
我正在尝试使用GetWindowLongPtrA,但我不断收到“无法在 DLL 'user32.dll' 中找到名为 'GetWindowLongPtrA' 的入口点”。 (也SetWindowLongPtrA 得到同样的错误)。我尝试了很多在 Google 上找到的解决方案,但都没有解决。
这是我写的函数的声明:
[DllImport("user32.dll")]
public static extern IntPtr GetWindowLongPtrA(IntPtr hWnd, int nIndex);
试过把EntryPoint = "GetWindowLongPtrA",把GetWindowLongPtrA改成GetWindowLongPtr,把CharSet = CharSet.Ansi,换成GetWindowLongPtrW和CharSet = CharSet.Unicode等等,都没有用。
我的计算机完全是“64 位”(但不能调用那个 64 位 WinAPI 函数?)。操作系统是 Windows 10。
这个问题的解决方法是什么?
【问题讨论】:
-
这个函数不是叫GetWindowLongPtr吗?而且我认为如果您以 32 位进程为目标,那么您应该调用 GetWindowLong。
-
我试过 GetWindowLongPtr 但也没有用。是的,GetWindowLong 确实有效,但鉴于我的系统是 64 位的,所以我认为使用 GetWindowLong 会更好。我尝试使用 GetWindowLongPtr 删除另一个窗口的最大化和最小化按钮,但它不起作用(这些按钮仍然留在那里)所以我认为我应该使用“Ptr”版本。
-
我的电脑完全是“64 位” - 但我猜你的进程是 32 位的。只有进程位数在这里起作用
-
空间不足可能导致任何事情。你需要先解决这个问题。空间回收:
1)Quick Options,2)Detailed Options。只需将您的下载和媒体文件夹转储到小型 USB 驱动器或 SD 磁盘上?之后运行cleanmgr.exe并可能进行压缩(对于快速 SSD 驱动器)。 -
不是问题的根源,但 P-Invoke marshaller 知道如何处理 A/W 业务,而您正在妨碍它。当您将函数声明为
GetWindowLongPtr并分配CharSet = CharSet.Auto时,它将正确选择W或A版本并处理字符串转换。
标签: c# .net winapi pinvoke getwindowlong