JNative的一些使用心得
程序员文章站
2022-06-08 17:02:55
...
JNative的一些使用心得
数据类型对应:
注1:如果DLL的返回值是指针,那么用整数类型接收返回值(这得到的是指针的地址),然后
通过Pointer和NativeMemoryBlock进行转换,例如:
native.setRetVal(Type.INT);
int address = native.getRetValAsInt();
pointer = new Pointer(new NativeMemoryBlock(address, buffSize))
byte[] data = pointer.getMemory();
// 然后截取data里面的信息来获取内容
注2:如果DLL的参数是指针型,那么通过Pointer来作为参数传入:
Pointer pointer = new Pointer(MemoryBlockFactory.createMemoryBlock(pointer_len));
native.setParameter(0, pointer);
注3:不管DLL里面是int还是unsigned int类型,在java这边一律用同样字节数的int类型匹配,
但DLL里面如果是unsigned int时,在java边需要把收到的int转为无符号的整数存放到long中,
其他同样情况的无符号数的处理类似。
注4:结构体里面的char*转到String时,可能在String里面会出现\0,这时需要自己做截断处理。