java使用jna修改桌面_java - Java JNA获取桌面项目位置 - 堆栈内存溢出

问题是com.sun.jna.Native.getNativeSize(Class)不是在这种情况下使用的正确函数。 使用32位JVM时,问题是可见的(64位虚拟机不可见)。

对于结构,上面提到的函数假​​定它们通过引用传递(指向结构的指针),因此函数返回Native.POINTER_SIZE的值。 在64位虚拟机上,运气匹配POINT结构的大小。 在32位VM上, Native.POINTER_SIZE是4字节,因此只能保存结果结构的一部分。

最相关的部分:要确定JNA中结构的大小,请使用Structure#size函数。 在这种情况下,使用ReadProcessMemory的最终参数也很有帮助。 该函数返回读取的字节数并显示差异(4对8)。

进一步的评论:记得释放你分配的内存,并关闭收到的进程句柄。

这是完整的可运行样本(仅缺少导入,使用JNA 5.2测试):

public class Test {

private interface Kernel32 extends com.sun.jna.platform.win32.Kernel32 {

Kernel32 INSTANCE = Native.load("kernel32", Kernel32.class, W32APIOptions.DEFAULT_OPTIONS);

public Pointer VirtualAllocEx(HANDLE hProcess, Pointer lpAddress, SIZE_T dwSize, int flAllocationType, int flProtect);

public boolean VirtualFreeEx(HANDLE hProcess, Pointer lpAddress, S

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值