JNative的问题,返回值为void*,纠结一天了,请高手来帮忙 本帖最后由 lovetulong 于 2011-06-23 17:56:42 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void*不可能传递给Java,结贴吧。真的。void*在C/C++里面意味着 指向任何类型的 指针。 C的东西吧java中 void 是无返回值的关键字不明白,不过可以去C版块去问问~ 不是void而是void*,是任意类型的指针…… 你可以把它当成int保存起来,下次从int转换成void *就行 看下JNI里面的语法,或许对你有些帮助哦! jNative.setRetVal(Type.INT);int i = jNative.getRetVal();保存成Int的操作是不是上面那样?从int怎么转换成void *呢? void*为何一定要在java端实现呢?java调用第三方dll不是这样做的,java不直接调用第三方dll,因为第三方dll未必符合JNI规范,也就是说有些jvm.h的信息,第三方dll可能就没使用,这样就无法识别jni的java类型,也就是java和第三方dll的类型就不能直接转换,所以一般java不直接调用第三方dll。一般做法是在java段写个native方法,编译生成class,然后用javah生成C的头文件,然后在C里用这个头文件写个dll(这个dll叫第二方dll,也就是java直接调用的),在这个第二方dll去调用第三方dll,这样,因为第二方dll也是C写的,所以类型很容易协调。所以你的void*可以在自己写的java能直接调用的第二方dll里去定义。 一个计算问题 請教Gregorian.clear(Calendar.DATE)的功能失效問題 请问怎么让Map以插入的顺序读取数据? 请问这句话对不对? 如何判断一个中文字符串的长度 谁能详细的讲以下java.awt.robot类的方法和具体的用法?? 有关多个文件编译和package 推荐一個好的性能測試工具 为什么 java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性 JAVA开发联盟好吗? Swing问题 UDP 多线程的问题
java中 void 是无返回值的关键字不明白,不过可以去C版块去问问~
jNative.setRetVal(Type.INT);
int i = jNative.getRetVal();
保存成Int的操作是不是上面那样?从int怎么转换成void *呢?
java调用第三方dll不是这样做的,java不直接调用第三方dll,因为第三方dll未必符合JNI规范,也就是说有些jvm.h的信息,第三方dll可能就没使用,这样就无法识别jni的java类型,也就是java和第三方dll的类型就不能直接转换,所以一般java不直接调用第三方dll。
一般做法是在java段写个native方法,编译生成class,然后用javah生成C的头文件,然后在C里用这个头文件写个dll(这个dll叫第二方dll,也就是java直接调用的),在这个第二方dll去调用第三方dll,这样,因为第二方dll也是C写的,所以类型很容易协调。所以你的void*可以在自己写的java能直接调用的第二方dll里去定义。