浏览 2150 次
|
锁定老贴子 主题:JNI,可用乎??
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-09-03
现在在做一个项目,跟银行对接的系统,我们选择java开发,因为银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?
大家伙对于JNI怎么看待? 有使用过它的麻? 它JNI执行的效率如何? 对资源的占用如何?? 因为我们比较关心效率,所以这个问题我想先问一下大家伙!! 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-03
firebody 写道 ... 银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。
你可以先用 C 写一个 DLL 来调用银行给的库,对银行加密函数的参数加以包装,你的 Java 程序再通过 JNI 调用你写的 DLL。 firebody 写道 采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?
Java 是没有指针的,你可以传递 byte[] 或者 String。 firebody 写道 大家伙对于JNI怎么看待?
有使用过它的麻? 它JNI执行的效率如何? 对资源的占用如何?? 因为我们比较关心效率,所以这个问题我想先问一下大家伙!! JNI 调用的是本地代码,效率/资源占用率肯定不会比直接用 Java 差。 编写 DLL 的时候要小心处理在 DLL 程序里使用的内存、指针,因为本地代码和 JVM 是同一进程,如果 DLL 导致了内存泄漏、进程崩溃会连累到 JVM。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-03
simonliu 写道 firebody 写道 ... 银行给我们的CRC,加密函数都是 C语言,参数大多是char*,有些甚至还是Struct CRC *指针。
你可以先用 C 写一个 DLL 来调用银行给的库,对银行加密函数的参数加以包装,你的 Java 程序再通过 JNI 调用你写的 DLL。 firebody 写道 采用JNI调用C函数的话,对于指针类型的参数,我没有找到对应的Wrapper ,不知道JNI对这些本地语言的各种指针是怎么wrapper的?
Java 是没有指针的,你可以传递 byte[] 或者 String。 谢谢simonliu 得答复! 我还想问一下: 对结构指针参数怎么包装呢? 难道对于一个结构: Struct Transaction_Message{ long num, char name[10+1], int num2; char* pointer; } 我们需要专门写一个这样得C Dll 码: CallDllFunction( long num,char* name,int num2,char* pointer){ struct trans=struct(num,name,num2,pointer); ............... } 这样得话,确实可以,不过如果结构很长,那么Dll 函数参数就很多!这样有什么更好得解决办法码? 谢谢! |
|
| 返回顶楼 | |
|
最后更新时间:2004-09-03
jvm是没法管理本地方法内存使用的,所以本地方法质量一定要高,不然很容易出现core dump。至于速度,应该不成问题。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-09-03
引用 对结构指针参数怎么包装呢? 难道对于一个结构:
Struct Transaction_Message{ long num, char name[10+1], int num2; char* pointer; } 我们需要专门写一个这样得C Dll 码: CallDllFunction( long num,char* name,int num2,char* pointer){ struct trans=struct(num,name,num2,pointer); ............... } 这样得话,确实可以,不过如果结构很长,那么Dll 函数参数就很多!这样有什么更好得解决办法码? 我不知道 JNI 接口能不能传递 Struct,没有试过,估计有困难。 我建议,如果参数很多的话,你可以考虑传递一个 XML 字符串,用 XML 来表示 Struct。 |
|
| 返回顶楼 | |





