You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将WinDef.POINT转换为WinDef.POINT.ByValue类型?

解决方案

你遇到的是JNA库中结构体按值/按引用传递的类型适配问题,可按以下步骤处理:

  • 首先明确WinDef.POINT默认是按引用传递的类型(本质是ByReference子类),而GetCursorPos本身要求传入指针类型的POINT对象接收输出值,所以你首先拿到的普通POINT对象是符合GetCursorPos调用要求的。
  • 要转成WinDef.POINT.ByValue类型只需要手动赋值坐标即可,无需额外复杂操作:
// 第一步:获取光标坐标
WinDef.POINT cursorPoint = new WinDef.POINT();
User32.INSTANCE.GetCursorPos(cursorPoint);

// 第二步:构造ByValue实例并赋值
WinDef.POINT.ByValue pointByVal = new WinDef.POINT.ByValue();
pointByVal.x = cursorPoint.x;
pointByVal.y = cursorPoint.y;

// 第三步:直接将pointByVal传入要求ByValue类型参数的函数即可
  • 如果你的JNA版本中WinDef.POINT.ByValue提供了带x、y参数的构造方法,也可以直接简化成一行构造:
WinDef.POINT.ByValue pointByVal = new WinDef.POINT.ByValue(cursorPoint.x, cursorPoint.y);

注意:不能直接将普通WinDef.POINT对象强转为WinDef.POINT.ByValue类型,否则会抛出类型转换异常,必须显式构造新的ByValue实例赋值。

内容的提问来源于stack exchange,提问作者vbyzjnlehi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:45:04