日期:2014-05-20  浏览次数:20968 次

JNA疑问
unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber)
{
// AfxMessageBox("hello",NULL,NULL);
// memcpy((char *)devicenumber,"\x7\x6f\xda\x40\x00\x00",6);
///*
devicenumber[0]=7;
devicenumber[1]=111;
devicenumber[2]=218;
devicenumber[3]=64;
devicenumber[4]=0;
// */

// unsigned char sn[20],cRet;
// cRet=ReadSN(sn);
// if(!cRet)two_one(sn+5,8,devicenumber);
return 0;

}
这种函数原型、我需要把devicenumber返回。我把返回类型改成char */java端怎么接收不到啊 该怎么处理?
public String pcdgetdevicenumber(String value);
这样接受到的是:INI~1\AppData\Local\Temp

------解决方案--------------------
貌似是因为你类型写错了。java里面的类型。
unsigned char *devicenumber我记得这个无符号char指针在java中应该用byte数组来表示
public String pcdgetdevicenumber(byte[] value);
使用的时候需要手动分配地址,也就是
devicenumber[0]=7;
    devicenumber[1]=111;
    devicenumber[2]=218;
    devicenumber[3]=64;
    devicenumber[4]=0;
上面共有5个元素,那么你需要创建一个5个元素的数组,byte[] value = new byte[5];
pcdgetdevicenumber(value);

楼主谷歌一下JNA类型对照表吧
------解决方案--------------------
jna里面要用这种东西需要用到Reference类型对应参数类型的派生类型,比如*int 就是IntByReference类,这样这个参数才会保证内存地址不变