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

JNative中参数的问题。
以前用Delphi调用一个DLL,实现读卡,方法是
cardnum:='';
username:='';
phone:='';
address:='';
money:='';
i := readcard(cardnum, username, phone, address, money);
这样就可以读出信息,返回值是整型,用于判断读卡是否成功,函数参数内的变量用于获取该卡中的用户信息,比如卡号、用户名等,如果读卡成功后,cardnum的值就由原来的空字符串变成用户的真实卡号,username也变为用户名。
现在要在java中用JNative调用该DLL,
  n = new JNative("ICCard.dll", "readcard");  
  n.setRetVal(Type.INT); // 指定返回参数的类型  
  int i = 0;
  n.setParameter(i++, Type.STRING, cardnum);
  n.setParameter(i++, Type.STRING, username);
  n.setParameter(i++, Type.STRING, phone);
  n.setParameter(i++, Type.STRING, address); 
  n.setParameter(i++, Type.STRING, money); // 指定位置上的参数类型和值  
  n.invoke(); // 调用方法  
调用完成后,从返回值中得知读卡已经成功,可是不知道怎么取出传入参数的值,我直接取这些参数时的值是,都是空字符串。
我该怎样正确获取这些参数值呢?

------解决方案--------------------
楼主,你改写dll吧,设定可以用于读取各个字段的专门的接口,native的方法必须不能满足你的要求了
------解决方案--------------------
自己写一个关联自己java代码的C代码,在C中实现java变量向C变量的转化。
用native方法调用。
------解决方案--------------------
你最后还应该获取返回值啊!即
Integer.parseInt(n.getRetVal());

你看看这个帖子吧!

http://blog.csdn.net/volant_hoo/archive/2008/02/18/2102726.aspx