事情起由
因为计网大作业要求写一个网络流量监控系统,然后查阅资料后发现,计算机网络领域其实规定了了一组API接口规范供操作系统实现,这组API接口规范叫做PCAP(Packet Capture),Windows用winpcap(查阅后其实已经废弃了,现在用的是npcap)实现了该接口,linux用libpcap实现了该接口,由于个人比较喜欢用Java,所以必不可少的就是要养Java调用C了,这次调用C遇到了不少问题,这里说一下。
问题
32位的dll不能用64位的JRE调用
由于提供的dll文件都是32位,没办法用64为的JRE调用,所以这里必须换成32位JRE。
找不到dll文件的路径
由于直接用Native.load("jnetpcap",Pcap.class),这里我不知道它是到哪里去找这个jnetpcap.dll的,然后我去官网查了一下,解决办法就是先System.setProperty("jna.debug_load","true"),然后就可以发现他查找dll文件的路径了
最后我这边是放到项目文件夹下的lib文件夹中得以解决。
关于C的类型与Java类型转换问题
这个在这https://github.com/java-native-access/jna/blob/master/www/Mappings.md里都有