标签:blog class java int art http
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模拟指针开辟空间,数组首地址获取值,布布扣,bubuko.com
标签:blog class java int art http
原文地址:http://www.cnblogs.com/cuizhf/p/3703653.html