我用java jnative调用dll, 前面几个接口都是使用正常的.
但是有个接口调用过之后,会抛个异常,如下:An unrecoverable stack overflow has occurred.
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x0da1db27, pid=444, tid=580
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0-b64 mixed mode, sharing)
# Problematic frame:
# C  [VodCltApi.dll+0x1db27]
#
# An error report file with more information is saved as hs_err_pid444.log
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp========= 但是这个接口我用VC调用是正常的.不知道是哪里出了问题.

解决方案 »

  1.   

    我也遇到过这问题,后来没办法,就不用dll了,直接打成exe用了。
    不知道是什么原因,纯帮楼主顶了。
      

  2.   

    post contents of hs_err_pid444.log. Possible cause could be JVM running out of memory.//Ali
      

  3.   

    切除hs_err_pid444.log的内容,要不然怎么知道是什么错
      

  4.   

    #
    # An unexpected error has been detected by HotSpot Virtual Machine:
    #
    #  EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x100042c7, pid=2324, tid=3496
    #
    # Java VM: Java HotSpot(TM) Client VM (1.5.0_12-b04 mixed mode, sharing)
    # Problematic frame:
    # C  [sftp_p2p.dll+0x42c7]
    #---------------  T H R E A D  ---------------Current thread (0x003cb050):  JavaThread "main" [_thread_in_native, id=3496]siginfo: ExceptionCode=0xc00000fd, ExceptionInformation=0x00000000 0x00030464 Registers:
    EAX=0x0001c130, EBX=0x00000000, ECX=0x00030464, EDX=0x0005f538
    ESP=0x0004645c, EBP=0x00046464, ESI=0x0005f5c8, EDI=0x0005f544
    EIP=0x100042c7, EFLAGS=0x00010206Top of Stack: (sp=0x0004645c)
    0x0004645c:   0005f530 1000137d 0005f544 1000194c
    0x0004646c:   0005f538 0005f530 00000000 000464cc
    0x0004647c:   000030f0 0005f5b8 0005f5c8 00000000
    0x0004648c:   cccccccc cccccccc cccccccc cccccccc
    0x0004649c:   cccccccc cccccccc cccccccc cccccccc
    0x000464ac:   cccccccc cccccccc cccccccc cccccccc
    0x000464bc:   cccccccc cccccccc cccccccc cccccccc
    0x000464cc:   00000000 00000000 00000000 00000000 Instructions: (pc=0x100042c7)
    0x100042b7:   4c 24 08 72 14 81 e9 00 10 00 00 2d 00 10 00 00
    0x100042c7:   85 01 3d 00 10 00 00 73 ec 2b c8 8b c4 85 01 8b 
    Stack: [0x00030000,0x00070000),  sp=0x0004645c,  free space=89k
    Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
    C  [sftp_p2p.dll+0x42c7]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
    j  org.xvolks.jnative.JNative.nInvoke(I)V+0
    j  org.xvolks.jnative.JNative.invoke()V+67
    j  com.telnet.eafs.modules.sftp.SftpUtil.invokeDll(Ljava/lang/String;Ljava/lang/String;[Lcom/main/dll/DllType;Lorg/xvolks/jnative/Type;)Ljava/lang/String;+171
    j  com.telnet.eafs.modules.sftp.SftpUtil.fasong(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;+161
    j  com.telnet.eafs.modules.sftp.SftpUtil.main([Ljava/lang/String;)V+36
    v  ~StubRoutines::call_stub---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
      0x00a86410 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4060]
      0x00a85118 JavaThread "CompilerThread0" daemon [_thread_blocked, id=1672]
      0x00a960e0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=1964]
      0x00a7f248 JavaThread "Finalizer" daemon [_thread_blocked, id=3940]
      0x00a7e7a8 JavaThread "Reference Handler" daemon [_thread_blocked, id=2140]
    =>0x003cb050 JavaThread "main" [_thread_in_native, id=3496]Other Threads:
      0x00a5ca68 VMThread [id=3184]
      0x00a84a90 WatcherThread [id=3832]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
     def new generation   total 576K, used 169K [0x22ae0000, 0x22b80000, 0x22fc0000)
      eden space 512K,  23% used [0x22ae0000, 0x22afd750, 0x22b60000)
      from space 64K,  80% used [0x22b60000, 0x22b6cdb0, 0x22b70000)
      to   space 64K,   0% used [0x22b70000, 0x22b70000, 0x22b80000)
     tenured generation   total 1408K, used 535K [0x22fc0000, 0x23120000, 0x26ae0000)
       the space 1408K,  38% used [0x22fc0000, 0x23045df0, 0x23045e00, 0x23120000)
     compacting perm gen  total 8192K, used 651K [0x26ae0000, 0x272e0000, 0x2aae0000)
       the space 8192K,   7% used [0x26ae0000, 0x26b82fb8, 0x26b83000, 0x272e0000)
        ro space 8192K,  67% used [0x2aae0000, 0x2b040588, 0x2b040600, 0x2b2e0000)
        rw space 12288K,  47% used [0x2b2e0000, 0x2b88a268, 0x2b88a400, 0x2bee0000)Dynamic libraries:
    0x00400000 - 0x0040d000  D:\Program Files\Java\jdk1.5.0_12\bin\javaw.exe
    0x7c920000 - 0x7c9b6000  C:\WINDOWS\system32\ntdll.dll
    0x7c800000 - 0x7c91e000  C:\WINDOWS\system32\kernel32.dll
    0x77da0000 - 0x77e49000  C:\WINDOWS\system32\ADVAPI32.dll
    0x77e50000 - 0x77ee3000  C:\WINDOWS\system32\RPCRT4.dll
    0x77fc0000 - 0x77fd1000  C:\WINDOWS\system32\Secur32.dll
    0x77d10000 - 0x77da0000  C:\WINDOWS\system32\USER32.dll
    0x77ef0000 - 0x77f39000  C:\WINDOWS\system32\GDI32.dll
    0x77be0000 - 0x77c38000  C:\WINDOWS\system32\MSVCRT.dll
    0x76300000 - 0x7631d000  C:\WINDOWS\system32\IMM32.DLL
    0x62c20000 - 0x62c29000  C:\WINDOWS\system32\LPK.DLL
    0x73fa0000 - 0x7400b000  C:\WINDOWS\system32\USP10.dll
    0x6d740000 - 0x6d8dd000  D:\Program Files\Java\jdk1.5.0_12\jre\bin\client\jvm.dll
    0x76b10000 - 0x76b3a000  C:\WINDOWS\system32\WINMM.dll
    0x6d300000 - 0x6d308000  D:\Program Files\Java\jdk1.5.0_12\jre\bin\hpi.dll
    0x76bc0000 - 0x76bcb000  C:\WINDOWS\system32\PSAPI.DLL
    0x6d710000 - 0x6d71c000  D:\Program Files\Java\jdk1.5.0_12\jre\bin\verify.dll
    0x6d380000 - 0x6d39d000  D:\Program Files\Java\jdk1.5.0_12\jre\bin\java.dll
    0x6d730000 - 0x6d73f000  D:\Program Files\Java\jdk1.5.0_12\jre\bin\zip.dll
    0x66c40000 - 0x66c62000  F:\workspace\sqzf\JNativeCpp.dll
    0x76990000 - 0x76ace000  C:\WINDOWS\system32\OLE32.dll
    0x770f0000 - 0x7717b000  C:\WINDOWS\system32\OLEAUT32.DLL
    0x10000000 - 0x1003a000  C:\WINDOWS\system32\sftp_p2p.dll
    0x032d0000 - 0x0330a000  C:\WINDOWS\system32\arch.dll
    0x03310000 - 0x03344000  C:\WINDOWS\system32\tcp.dll
    0x71a40000 - 0x71a4b000  C:\WINDOWS\system32\WSOCK32.dll
    0x71a20000 - 0x71a37000  C:\WINDOWS\system32\WS2_32.dll
    0x71a10000 - 0x71a18000  C:\WINDOWS\system32\WS2HELP.dll
    0x719c0000 - 0x719fe000  C:\WINDOWS\system32\mswsock.dll
    0x60fd0000 - 0x61025000  C:\WINDOWS\system32\hnetcfg.dll
    0x71a00000 - 0x71a08000  C:\WINDOWS\System32\wshtcpip.dllVM Arguments:
    jvm_args: -Dfile.encoding=GBK
    java_command: com.telnet.eafs.modules.sftp.SftpUtil
    Launcher Type: SUN_STANDARDEnvironment Variables:
    JAVA_HOME=D:\j2sdk1.4.2_07
    PATH=F:/软件/jbpm eclipse/eclipse/jre/bin/client;F:/软件/jbpm eclipse/eclipse/jre/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Common Files\Thunder Network\KanKan\Codecs;C:\Program Files\Microsoft SQL Server\80\Tools\BINN;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\StormII\Codec;C:\Program Files\StormII
    USERNAME=Administrator
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel---------------  S Y S T E M  ---------------OS: Windows XP Build 2600 Service Pack 3CPU:total 2 (cores per cpu 2, threads per core 1) family 6 model 7 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2Memory: 4k page, physical 2087084k(1200644k free), swap 4025660k(3030620k free)vm_info: Java HotSpot(TM) Client VM (1.5.0_12-b04) for windows-x86, built on May  2 2007 02:07:59 by "java_re" with MS VC++ 6.0
      

  5.   

    Problematic frame:
    C [VodCltApi.dll+0x1db27]
    这里说明是你的c代码执行导致crash,一般就是从java向c函数传参数错误,导致执行的c代码出现问题。最好贴出你的java代码和c代码,以及传的参数是什么。
      

  6.   

    java 代码:JNative sftpUtil = null;
    try{
    sftpUtil = new JNative("sftp_p2p.dll", "sftp_p2p_client");
    sftpUtil.setRetVal(retVal);
    // for(int i=0;i<args.length;i++){
    // DllType type = args[i];
    // System.out.println(type.getValue().toString());
    // sftpUtil.setParameter(i, type.getType(), type.getValue()+"");
    // }
     String ret_msg = "返回信息";
     String path="C:\\dzbk\\sended\\201105";
    String pathFile="FFO365_00180005_19200000_00180005_0001.20110526";
    String ip="22.36.2.18";
    Integer port=1777;
    String userid="00180004";
    String password="12345678";
    sftpUtil.setParameter(0,Type.STRING, path);
    sftpUtil.setParameter(1,Type.STRING, pathFile);
    sftpUtil.setParameter(2,Type.STRING, ip);
    sftpUtil.setParameter(3,port);
    sftpUtil.setParameter(4, Type.STRING,userid);
    sftpUtil.setParameter(5, Type.STRING,password);
    sftpUtil.setParameter(6, Type.STRING,ret_msg);
    Pointer a = new Pointer(MemoryBlockFactory.createMemoryBlock(500));
    sftpUtil.setParameter(7, a );

    sftpUtil.invoke();
    return sftpUtil.getRetVal();
    }catch(Exception e){
                throw e;
            }finally{
                if (sftpUtil != null){
                    try{
                     sftpUtil.dispose();
                    }catch (Exception e){
                    }
                }
            }====================================
    sftp_p2p.dll 已放在C:\WINDOWS\system32sftp_p2p.dll提供的方法是sftp_p2p_client
    FUNCTION integer sftp_p2p_client( ref string file_path,&
                                      ref string file_name,&
                                      ref string peer_addr, &
                                      integer peer_port,&
                                      ref string uid, &
                                      ref string passwd, &
                                      ref string ret_msg )
      

  7.   

    应该是传参数的问题,dll中接受的应该是指针吧,而你直接传的是string类型。
      

  8.   

    问题已经解决了,是传入的参数导致崩溃。
    vc dll 有些变量放在栈上会导致java有些问题。