[转]jna模拟指针开辟空间,数组首地址获取值
http://blog.csdn.net/zhuzhichao0201/article/details/5817819
不是很明白,先记在这里
————————————————————————————————————————————————————————————
dll里面给的函数如下:
ReadWordBlock(HANDLE hScanner,
BYTE EPC_WORD,
BYTE *IDBuffer,
BYTE mem,
BYTE ptr,
BYTE len,
BYTE *Data,
BYTE *AccessPassword);
函数调用的时候BYTE *Data为输出参数,其他为输入参数。
C里面调用赋值为:
ReadWordBlock(m_hScanner,EPC_Word,IDTemp,mem,ptr,len,&DB[0],AccessPassword);
其中&DB[0]为输出。
怎样在java里面实现呢?
在java模拟写入:
ReadWordBlock(Pointer hScanner,
BYTE EPC_WORD,
BYTE[] IDBuffer,
BYTE mem,
BYTE ptr,
BYTE len,
ByteByReference Data,
BYTE[] AccessPassword);
调用的时候:
ByteByReference p_Data;
Memory mymem = new Memory(100);
p_Data.setPointer(mymem);
ReadWordBlock(m_hScanner,EPC_Word,IDTemp,mem,ptr,len,p_DB,AccessPassword);
byte[] DB = new byte[100];
mymem.read(0, DB, 0, 100);
关于jna模拟指针的问题归纳:
byte* 可以模拟为ByteByReference, byte[],int[]等等,视应用时的类型而定。
如果使用int[]很有可能造成数据出错,因为int的数据长度与byte不一样。
而如果使用byte[]要考虑到数据超过127的时候会变为负数。
解决办法为先定义一个int型数组获取到值以后,再用byte[]型数组获取:
int[] IDTemp[] = new int[12];
for (i = 0; i < 12; i++) {
IDTemp[i] = IDBuffer[CurSel][i + 1];//将获取的值放在IDTemp中
}
byte[] tempIDTemp = new byte[12];
for (int m = 0; m < 12; m++) { //将int型的值变为byte型的送进dll对应的byte型参数
if (IDTemp[m] > 127) {
tempIDTemp[m] = (byte) (IDTemp[m] - 256);
} else {
tempIDTemp[m] = (byte) IDTemp[m];
}
}
[转]jna模拟指针开辟空间,数组首地址获取值的更多相关文章
- c++ 二维数组定义 二维数组首地址查询
#include <iostream> using namespace std; int main() { ][] = { {,,}, {,,} }; cout << &quo ...
- C语言——数组名、取数组首地址的区别(一)
目录: 1. 开篇 2. 论数组名array.&array的区别 3. array.&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题, ...
- C语言学习笔记 (004) - 数组名和数组首地址(转)
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址.指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中) ...
- 对数组名取地址&a和 数组首地址a
#include <iostream> using namespace std; ] = {,,,,}; int main() { cout<<a<<" ...
- C语言 指针基础篇 数组,函数与指针的运用 2 14
下面看看如何在函数中运用指针吧 下面是往函数传入指针的简单操作,不是传入数组的.判断一个a是否大于b是的话给,是的话对其进行操作,不是的话就直接返回. #include <stdio.h> ...
- C语言指针系列 - 一级指针.一维数组,二级指针,二维数组,指针数组,数组指针,函数指针,指针函数
1. 数组名 C语言中的数组名是一个特殊的存在, 从本质上来讲, 数组名是一个地址, 我们可以打印一个指针的值,和打印一个数组的值来观察出这个本质: int nArray[10] ={ 0 }; in ...
- C++——指针2-指向数组的指针和指针数组
7.4 指向数组元素的指针 声明与赋值 例:int a[10], *pa; pa=&a[0]; 或 pa=a[p1] ; 通过指针引用数组元素,经过上述声明及赋值后: *pa就是a[0],*( ...
- C语言多维数组的地址
设有整型二维数组a[3][4]如下: 0 1 2 3 4 5 6 7 8 9 10 11 它的定义为: int a[3][4]={{0,1,2,3},{4,5 ...
- C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
1 作业讲解 指针间接操作的三个必要条件 两个变量 其中一个是指针 建立关联:用一个指针指向另一个地址 * 简述sizeof和strlen的区别 strlen求字符串长度,字符数组到’\0’就结束 s ...
随机推荐
- i3wm配置记录
因为工作用的笔记本配置比较差,一直用的是xfce4的桌面环境,最近发现其实基本就在浏览器.终端以及编辑器几个界面切换,所以何不直接用平铺窗口管理器,进一步节约资源. 选了一圈,似乎i3wm比较简单,主 ...
- js 倒计时跳转页面
<script type="text/javascript">var i = 5; var intervalid; intervalid = setInterval(& ...
- Java中常用的6种排序算法详细分解
排序算法很多地方都会用到,近期又重新看了一遍算法,并自己简单地实现了一遍,特此记录下来,为以后复习留点材料. 废话不多说,下面逐一看看经典的排序算法: 1. 选择排序 选择排序的基本思想是遍历数组的过 ...
- CAD启动找不到AC1ST16.DLL
今天在安装Win7 x64上CAD2006启动报错:找不到ac1st16.dll文件. 一查,是系统变量的问题.在系统变量Path中cad的路径为: C:\Program Files (x86)\Co ...
- php文件上传接口及文件上传错误服务器配置
一:上传表单 <form enctype="multipart/form-data" action="doFileUp.php" method=" ...
- 关于RecyclerView条目复用
前言 说下前几天遇到的一个小问题,关于RecyclerView条目选中状态的保存.众所周知,RecyclerView被创造出来用于条目的回收利用,但是,当前面回收的条目带有一些特殊的状态(区别于未选中 ...
- Entity Framework底层操作封装V2版本号(1)
由于同志们一直给我提建议说.曾经发的版本号有问题.所以经过了我这一年多的使用和扩展,如今方法基本稳定了. 如今贴出来给大家使用: 首先上场的是数据库操作层: using System; using S ...
- mui ajax方法
mui ajax方法详解: mui提供了mui.ajax,在此基础上有分装出mui.get()/mui.getJSON()/mui.post()三个方法. mui.ajax( url [,settin ...
- Android源码-SignApk.java
/* * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- 关于 yii2 cron运行 console的脚本不运行,可是手动运行成功的原因
在yii2中运行脚本出现了一个问题 手动运行没有问题. 在cron中不运行.最后找出来了原因 打开yii文件(在根文件夹以下) #!/usr/bin/env php <?php /** * Yi ...