JNA Pointer结构体传递
我们在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
JNA Pointer结构体传递相关推荐
- JNA嵌套结构体,如何访问内嵌结构体的成员?
如果不明白如何创建DLL动态链接库项目,可参照文章:https://blog.csdn.net/Xeon_CC/article/details/124873221 提出问题: C语言程序有个结构体叫B ...
- VC跨进程数据(结构体)传递-WM_COPYDATA
两个测试程序,都是MFC基于对话框的应用程序,一个是发送者,一个是接收者. 两个程序都使用同一个结构体: typedef struct {char imsi[20];char options[512] ...
- QT:复杂结构体不同窗口间传递
QT:复杂结构体不同窗口间传递(父传子,子传父) (父传子) 在写程序时,难免会碰到多窗体之间进行传值的问题,今天主要谈一下复杂结构体传值的问题(网上有很多博客,看的头疼,本篇进行详细解读). 具体原 ...
- c# 与c++接口间调用时传递结构体
复杂结构体的传递 1. 输出参数,结构体作为指针传出 非托管部分代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 ...
- 结构体引用_C/C++结构体完全攻略
结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值.在过去,面向对象编程的应用尚未普及之前,程序员通常使用这些从逻辑上连接在一起的数据组合到一个单元中.一旦结构体类型被声明并且其数据成员被标 ...
- c语言-结构体实例笔记
结构体实例 实例一览: 使用结构体存储学生的信息 Store information of a student using structure 计算二者距离(以英寸英尺为单位) Add two dis ...
- 结构体、共用体、位操作和枚举类型
1 引言 ● 结构体(Structure)[在C标准中有时也称为聚合体(Aggregate)]是统一在同一个名字之下的一组相关变量的集合,它可以包含不同类型的变量 ● 结构体通常用来定义储存在文件中的 ...
- Golang 结构体
前言 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体.每个值称为结构体的成员. 用结构体的经典案例:学校的学生信息,每个学生信息包含一个唯一的学生学号.学生的名字.学生的性别.家庭 ...
- 结构体struct的自然对齐问题(经典)
结构体struct的自然对齐问题下面的机构体 struct A { char c; int i; char cc; }; 它的sizeof()是多少呢? 如果是紧凑对齐的话,当 ...
最新文章
- 香港中文大学(深圳)韩晓光教授招收三维数字人方向博士生
- Spring Aop实例之AspectJ注解配置
- nginx通过用户和密码来实现认证功能
- 01 MySQL锁概述
- 50道练习带你玩转Pandas
- Visual Basic.NET中访问数据的方法(zz)
- 顺网无盘服务器木马,无盘顺网虚拟服务器设置
- java中的10的算法,Java中10个常用的排序算法
- 苹果电脑 默认安装jdk位置_收藏起来你一定用的上!JDK的安装和配置
- Linux服务器问题排查工具sar命令 sysstat工具集使用
- HAProxy的安装和部署
- Spring--超简单利用quartz实现定时作业
- 两种方式(xml+代码)构建SqlSessionFactory+完整实现
- _MSC_VER简介与使用
- TCPDump工具使用与UDP数据包分析
- 新手零基础一小时学会小程序开发制作教程
- IndentationError: expected an indented block缩进没问题但是出错
- matlab 画三维图像
- linux非连续内存,(转)linux高端内存管理之非连续内存区(分配和释放)
- 数学家张益唐亲自评价关于攻克朗道西格尔零点猜想这个研究成果和意义!
热门文章
- 微信小程序 - 动态背景图片实现
- Mongodb安装缓慢解决方案
- Silverlight“.NET技术” 2.5D RPG游戏技巧与特效处理:(十)空间分层战斗系统
- Ajax简介、封装、同步异步 Ajax相关面试题
- 自考选择汉语言文学还是行政管理比较易过?
- HTML5期末大作业:个人信息展示网站设计——清新春暖花开个人博客网站(6页) HTML+CSS+JavaScript...
- python优化算法工具包_12种Python 机器学习 数据挖掘工具包,一定让你受益匪浅...
- 重庆南川金佛山中医院邀请市法医学会司法鉴定所专家葛力到我院交流指导工作
- C语言之辉夜纪——巨龙陨落
- layui修改框中等下拉框取值问题_layui下拉框不显示的问题