我们在C++转JAVA代码的时候有时会遇到指针的转换,这里给出类型转换图:
1.Pointer记录结构体数据,作为函数参数传递
//写入
public class A{
int x;
}
A a = new A();
Pointer ptrA = a.getPointer();
a.write();//结构体内存转移到Ponter
//读取
a.read();//Pointer内存转移到结构体
2.JNA Pointer API
http://java-native-access.github.io/jna/4.2.0/com/sun/jna/Pointer.html
3. JAVA中参数时按值传递的,如果需要类似引用的作用
1.对于基本类型
使用数组传递,比如boolean,使用boolean[]传递
2. 对于结构体
//A.java
import com.sun.jna.Structure;
public class A extends Structure{
public int dwsize;
}
//Example2.java
import java.awt.Point;
import java.util.HashMap;
import java.util.Map;
import com.sun.jna.Pointer;
import com.sun.jna.Structure;
import com.sun.jna.ptr.ByteByReference;
public class Example2 {
static void work(Pointer p)
{
A stru = new A();
Pointer pointer = stru.getPointer();
pointer.write(0, p.getByteArray(0, stru.size()),0, stru.size());
stru.read();
stru.dwsize=2;
stru.write();
p.write(0, pointer.getByteArray(0, stru.size()), 0, stru.size());
}
public static void main(String[] args){
A dd = new A();
dd.dwsize=1;
System.out.println("修改前的dwsize = "+ dd.dwsize);
Pointer p=dd.getPointer();
dd.write();
work(p);
dd.read();
System.out.println("修改后的dwsize = "+ dd.dwsize);
}
}
下载
//配置JNA需要jna.jar和example.jar
链接: https://pan.baidu.com/s/1Gwwvze2J8qR6m1V2c-3hgg 提取码: jj43