日期:2014-05-20  浏览次数:20663 次

一个关于JNI调用DLL导致JVM崩溃的问题!!!
我现在利用JAVA语言,通过JNI技术调用一个C++写的DLL(我叫A),全名是:CEDLL.dll,这个DLL   A函数原型是:
int   EnData(unsigned   char   *   DataBuf,   int   DataLen,   unsigned   char   *   OutBuf,   int   OutLen)
int   DeData(unsigned   char   *   DataBuf,   int   DataLen,   unsigned   char   *   OutBuf,   int   OutLen)
因为不能直接调用这个DLL   A,所以我用C++写了一个外套DLL   B(索性叫B),来调用A中的这两个函数:
,其中DLL   B已经生成,其他头文件也正常生成,我用JAVA写了方法调用也成功,但是现在问题来了,
因为我这个程序需要24小时运行,但是只要跑上几个小时,JVM系统就会崩溃,
现在,我怀疑,可能我带入的参数导致DLL   A(CEDLL.DLL)溢出了,即如下两个函数的参数带入有问题:
int   EnData(unsigned   char   *   DataBuf,   int   DataLen,   unsigned   char   *   OutBuf,   int   OutLen)
int   DeData(unsigned   char   *   DataBuf,   int   DataLen,   unsigned   char   *   OutBuf,   int   OutLen)
但我问DLL开发商,说,如果类似OutLen这种参数长度不够,也会做判断,应该不会DLL调用崩溃,
现在我很困惑,不知道到底是参数调用错了,还是我以上外套DLL   B写错了,或者是JVM环境配置不合适?
为什么不定时会导致JVM崩溃,
还希望有经验的高手朋友多多指教!!!!

------解决方案--------------------
我也遇到同样的问题,如果不是你自己写的DLL错的话,就应该是JVM、WINDOWS和厂家提供的DLL有问题。
我遇到的问题是有时启动DLL没有问题,有时JVM就CRASH了。
如果可能可能的话可以调大java虚拟机的启动内存试试看
------解决方案--------------------
关注