我们在C++转JAVA代码的时候有时会遇到指针的转换,这里给出类型转换图:
| Native Type | Java Type | Native Representation |
|---|---|---|
| char | byte | 8-bit integer |
| wchar_t | char | 16/32-bit character |
| short | short | 16-bit integer |
| int | int | 32-bit integer |
| int | boolean | 32-bit integer (customizable) |
| long, __int64 | long | 64-bit integer |
| long long | long | 64-bit integer |
| float | float | 32-bit FP |
| double | double | 64-bit FP |
| pointer | Buffer/Pointer | |
| pointer array | [] (array of primitive type) | |
| char* | String | |
| wchar_t* | WString | |
| char** | String[] | |
| wchar_t** | WString[] | |
| void* | Pointer | |
| void ** | PointerByReference | |
| int& | IntByReference | |
| int* | IntByReference | |
| struct | Structure | |
| (*fp)() | Callback | |
| varies | NativeMapped | |
| long | NativeLong | |
| pointer | PointerType |
- Pointer记录结构体数据,作为函数参数传递
//写入
public class A{
int x;
}
A a = new A();
Pointer ptrA = a.getPointer();
a.write();//结构体内存转移到Ponter
//读取
a.read();//Pointer内存转移到结构体
- JNA Pointer API
http://java-native-access.github.io/jna/4.2.0/com/sun/jna/Pointer.html
- JAVA中参数时按值传递的,如果需要类似引用的作用
- 对于基本类型
使用数组传递,比如boolean,使用boolean[]传递 - 对于结构体
- 对于基本类型
//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
本文详细介绍了从C++到Java代码转换时的指针处理方法,提供了类型转换图表,涵盖了基本数据类型、结构体及函数指针的转换,并通过示例展示了如何在Java中使用Pointer API进行结构体数据的读写操作。
1149

被折叠的 条评论
为什么被折叠?



