问题描述
使用如下myjnative=newJNative("xx.dll","某方法");myjnative.setRetVal(Type.VOID);intj=0;Stringresult=newString("");myjnative.setParameter(j++,Type.STRING,"xxxx");myjnative.setParameter(j++,Type.STRING,result);myjnative.invoke();该方法返回的是布尔值,但实际上result值是引用类型,我要取的是result的值,这种情况下该怎么取值
解决方案
解决方案二:
备注下DLL是现成的,无法修改。
解决方案三:
人工置顶,求解决方案
解决方案四:
顶,求解决方案
解决方案五:
将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值
解决方案六:
引用4楼hwndid的回复:
将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值
String[]result=newString[1];myjnative.setParameter(j++,result[0]);这样子也是无法取到值的jnative中参数不能传递为数组
解决方案七:
引用5楼continue1948的回复:
引用4楼hwndid的回复:将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值String[]result=newString[1];myjnative.setParameter(j++,result[0]);这样子也是无法取到值的jnative中参数不能传递为数组
在java中基本数据类型传参时是值传递,对象传参时才是地址传递,你如果是传一个值进去,是无法取到改变的值,甚至是改值不能被改变,能被改变的值只能传地址过去,根据你的这个借口的定义你的这个功能无法实现
解决方案八:
引用6楼hwndid的回复:
引用5楼continue1948的回复:引用4楼hwndid的回复:将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值String[]result=newString[1];myjnative.setParameter(j++,result[0]);这样子也是无法取到值的jnat……
后根据搜索,查询到使用指针的方法,并作为参数传进去MemoryBlockm=MemoryBlockFactory.createMemoryBlock(2048);Pointerpp=newPointer(m);myjnative.setParameter(3,pp);最终使用pp.getAsString();获得结果值但这样子的话,返回结果为空字符使用pp.getMemory();的话返回byte[]字节,但也无法转换为String,以下三种均不行{newString(byte[],"ISO-8859-1")newString(byte[],"UTF-8")newString(byte[],"GBK")}再次求解
解决方案九:
遇到同样的问题顶起
解决方案十:
myjnative.invoke();//取值(可以加转换成自己对应的java类型);myjnative.getRetVal()
解决方案十一:
pp.getAsString();是空哎
解决方案十二:
http://www.cnblogs.com/beipiaofeng/p/3449576.html