JNA疑问
unsigned char __stdcall pcdgetdevicenumber(unsigned char *devicenumber)这种函数原型、我需要把devicenumber返回。我把返回类型改成char */java端怎么接收不到啊 该怎么处理?
{
//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;
}
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类,这样这个参数才会保证内存地址不变