java jnative调用DLL 对于引用类型的值怎么取回

continue1948 2012-11-26 11:30:01
使用如下
myjnative = new JNative("xx.dll", "某方法");
myjnative.setRetVal(Type.VOID);
int j = 0;
String result= new String("");
myjnative.setParameter(j++, Type.STRING,"xxxx");
myjnative.setParameter(j++, Type.STRING, result);
myjnative.invoke();
该方法返回的是布尔值,但实际上result值是引用类型,我要取的是result的值,这种情况下该怎么取值
...全文
355 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
北北风 2013-11-29
  • 打赏
  • 举报
回复
http://www.cnblogs.com/beipiaofeng/p/3449576.html
  • 打赏
  • 举报
回复
pp.getAsString();是空哎
  • 打赏
  • 举报
回复
myjnative.invoke(); //取值(可以加转换成自己对应的java类型); myjnative.getRetVal()
  • 打赏
  • 举报
回复
遇到同样的问题 顶起
continue1948 2012-11-27
  • 打赏
  • 举报
回复
顶,求解决方案
continue1948 2012-11-27
  • 打赏
  • 举报
回复
人工置顶,求解决方案
continue1948 2012-11-27
  • 打赏
  • 举报
回复
引用 6 楼 hwndid 的回复:
引用 5 楼 continue1948 的回复:引用 4 楼 hwndid 的回复: 将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值 String[] result=new String[1]; myjnative.setParameter(j++, result[0]); 这样子也是无法取到值的 jnat……
后根据搜索,查询到使用指针的方法,并作为参数传进去 MemoryBlock m = MemoryBlockFactory.createMemoryBlock(2048); Pointer pp = new Pointer(m); myjnative.setParameter(3, pp); 最终使用pp.getAsString();获得结果值 但这样子的话,返回结果为空字符 使用pp.getMemory();的话返回byte[]字节,但也无法转换为String,以下三种均不行 { new String(byte[],"ISO-8859-1") new String(byte[],"UTF-8") new String(byte[],"GBK") } 再次求解
我百了个度 2012-11-27
  • 打赏
  • 举报
回复
引用 5 楼 continue1948 的回复:
引用 4 楼 hwndid 的回复: 将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值 String[] result=new String[1]; myjnative.setParameter(j++, result[0]); 这样子也是无法取到值的 jnative中参数不能传递为数组
在java中基本数据类型传参时是值传递,对象传参时才是地址传递,你如果是传一个值进去,是无法取到改变的值,甚至是改值不能被改变,能被改变的值只能传地址过去,根据你的这个借口的定义你的这个功能无法实现
continue1948 2012-11-27
  • 打赏
  • 举报
回复
引用 4 楼 hwndid 的回复:
将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值
String[] result=new String[1]; myjnative.setParameter(j++, result[0]); 这样子也是无法取到值的 jnative中参数不能传递为数组
我百了个度 2012-11-27
  • 打赏
  • 举报
回复
将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值
continue1948 2012-11-26
  • 打赏
  • 举报
回复
备注下DLL是现成的,无法修改。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧