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

问题描述

使用如下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

时间: 2024-09-22 18:23:23

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

关于java中用JNative调用dll文件报错的问题,跪求大神解决

问题描述 我在Eclipse中新建一个java工程,在java文件中用JNative调用dll文件,我把JNativeCpp.dll放在的C:WindowsSystem32中,把JNative.jar放在C:ProgramFilesJavajre7libext中,可是运行的时候总是报错JNativelibrarynotloaded,sorry!求解决啊,弄了一下午了,快死人了,还没调出来! 解决方案 解决方案二:JNativeCpp.dll放在的C:Windows下试试

jnative 调用dll文件

问题描述 我在myEclipse工具中建了一个java类,里面写的是jnative调用dll文件,但不知道怎么老是错误!//源代码publicstaticvoidmain(String[]args)throwsNativeException,IllegalAccessException{System.loadLibrary("test");JNativejnative=newJNative("test","show");jnative.setRe

动态链接库-java 如何调用dll 数据接口

问题描述 java 如何调用dll 数据接口 如题: 现在我有个dll 数据接口库.. 求一份java 调用 dll 数据接口demo 或者给个博客地址.. 谢谢... 还有一个问题就是.. 请问使用什么工具可以查看到dll内的 接口内容.. 解决方案 在Windows中实现Java调用DLL(转载)

jnative-请问关于JNative调用dll,传入引用问题

问题描述 请问关于JNative调用dll,传入引用问题 请教各位达人,在下目前使用JNative调用一个第三方自定义的dll文件, 其中一个接口是需要传入REF指针来获取计算结果的,而且需要事先分配空间才可以. 请问这个过程如何操作,网上查过一些资料,都没有达到想要的效果,在此先谢过. 解决方案 http://chengzhi.iteye.com/blog/1073271 解决方案二: JNative调用dll打印

JNative调用dll参数设置问题

问题描述 在做java对sqlite加密过程中,选择了用JNative调用wxsqlite的sqlite3.dll来实现加密,其中用到了dll文件中的sqlite3_open,sqlite3_rekey,sqlite3_key,sqlite3.close函数.在C中,参数如下:intsqlite3_open(constchar*filename,/*Databasefilename(UTF-8)*/sqlite3**ppDb/*OUT:SQLitedbhandle*/)intsqlite3_re

请教JNative 调用DLL的最佳方式

问题描述 最近做一个项目需要跟硬件打交道,而硬件开发商只提供了一个DLL对硬件进行操作,于是我就用JNative对DLL中定义的函数进行调用,目前已知的调用方法是JNative native = new JNative("DELL Name","methodName");其它的构造忽略,在这种情况下,已创建了一个JNative的实例,并且要调用的方法也已跟这个实例绑定了,也就是说这个native只能调用指定的methodName,要想调用DLL中其它方法,还得重新实

java 怎么调用DLL文件

问题描述 请问各位大哥,JAVA怎么调用由VFP生成的DLL文件,我查询了好多资料,都是有关JAVA调用由C/C++的DLL文件!但一直都搞不懂怎么调用VFP的DLL文件,麻烦那位大哥能够个详细的介绍!谢谢了!问题补充: MessageBox(0, "This MessageBox is a native Win32 MessageBox", "Caption", 0); 能说明下这几个参数是什么意思吗? 解决方案 传统的做法是用JNI,但是JNI太麻烦了现在有一个

java如何调用C++存入memcached的值

问题描述 最近开发项目需要用到memcached来存储数据,但是由C++将数据存储在memcached中,由java来调用存储的数据,由那位大虾用过memcached,给个思路,想了好久都测试不通过,由用过的说下谢谢了 解决方案 解决方案二:没和C++一起用过不过2个语言的数据对象有些不同这个应该注意解决方案三:晕有谁会啊

请教java通过JNative调用dll的问题,HWND参数如何创建。

问题描述 JNativen=null;n=demo.getJNativeByFunction("InitDLL");n.setRetVal(Type.INT);HWNDhwnd=newHWND(0);n.setParameter(0,hwnd.getValue());n.invoke();如此调用报错:-----------------------------------------------------------------------------------##Anunexpe