java jnative调用DLL 对于引用类型的值怎么取回
使用如下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的值,这种情况下该怎么取值 --------------------编程问答-------------------- 备注下DLL是现成的,无法修改。 --------------------编程问答-------------------- 人工置顶,求解决方案 --------------------编程问答-------------------- 顶,求解决方案 --------------------编程问答-------------------- 将对应类型的result定义成对应的数组,数组长度为1,传参时以数组类型传参,执行完成后,取result[0],可得到该值 --------------------编程问答--------------------
String[] result=new String[1];
myjnative.setParameter(j++, result[0]);
这样子也是无法取到值的
jnative中参数不能传递为数组 --------------------编程问答--------------------
在java中基本数据类型传参时是值传递,对象传参时才是地址传递,你如果是传一个值进去,是无法取到改变的值,甚至是改值不能被改变,能被改变的值只能传地址过去,根据你的这个借口的定义你的这个功能无法实现
--------------------编程问答--------------------
后根据搜索,查询到使用指针的方法,并作为参数传进去
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")
}
再次求解 --------------------编程问答-------------------- 遇到同样的问题 顶起 --------------------编程问答-------------------- myjnative.invoke();
//取值(可以加转换成自己对应的java类型);
myjnative.getRetVal() --------------------编程问答-------------------- pp.getAsString();是空哎 --------------------编程问答-------------------- http://www.cnblogs.com/beipiaofeng/p/3449576.html
补充:Java , Java SE