关于jna5.6 调用Kernel32 GetLocalTime

看了不少关于jna 调用Kernel32 GetLocalTime 的文章 ,现在的新的jna5.6 结构需要加

@FieldOrder,否则会出现
Exception in thread "main" java.lang.Error: Structure.getFieldOrder() on class test$PSYSTEMTIME does not provide enough names [0] ([]) to match declared fields [8] ([wDay, wDayOfWeek, wHour, wMilliseconds, wMinute, wMonth, wSecond, wYear])
        at com.sun.jna.Structure.getFields(Structure.java:1077)
        at com.sun.jna.Structure.deriveLayout(Structure.java:1232)
        at com.sun.jna.Structure.calculateSize(Structure.java:1159)
        at com.sun.jna.Structure.allocateMemory(Structure.java:401)
        at com.sun.jna.Structure.ensureAllocated(Structure.java:377)
        at com.sun.jna.Structure.ensureAllocated(Structure.java:367)
        at com.sun.jna.Structure.write(Structure.java:764)
        at com.sun.jna.Structure.autoWrite(Structure.java:2228)
        at com.sun.jna.Function.convertArgument(Function.java:532)
        at com.sun.jna.Function.invoke(Function.java:345)
        at com.sun.jna.Library$Handler.invoke(Library.java:265)
        at com.sun.proxy.$Proxy0.GetLocalTime(Unknown Source)
        at test.main(test.java:61)

代码如下:

package com.jan_test;

import com.sun.jna.*;
import com.sun.jna.win32.*;
import com.sun.jna.Structure.FieldOrder;

import static com.sun.jna.platform.win32.Wtsapi32.INSTANCE;


public class Main {
    @FieldOrder({ "wYear", "wMonth", "wDayOfWeek", "wDay", "wHour", "wMinute", "wSecond", "wMilliseconds" })
    public static class SYSTEMTIME extends Structure
    {
        public short wYear;
        public short wMonth;
        public short wDayOfWeek;
        public short wDay;
        public short wHour;
        public short wMinute;
        public short wSecond;
        public short wMilliseconds;
    }

    public interface Kernel32 extends StdCallLibrary
    {


        void GetLocalTime (SYSTEMTIME result);
    }

    public static void main(String[] args) {
   // write your code here
        Kernel32 lib =  Native.load ("kernel32",Kernel32.class);
        //Kernel32 SYNC_INSTANCE = (Kernel32) Native.synchronizedLibrary(INSTANCE);
        SYSTEMTIME time = new SYSTEMTIME ();
        lib.GetLocalTime (time);
        System.out.println ("Year is "+time.wYear);
        System.out.println ("Month is "+time.wMonth);
        System.out.println ("Day of Week is "+time.wDayOfWeek);
        System.out.println ("Day is "+time.wDay);
        System.out.println ("Hour is "+time.wHour);
        System.out.println ("Minute is "+time.wMinute);
        System.out.println ("Second is "+time.wSecond);
        System.out.println ("Milliseconds are "+time.wMilliseconds);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值