我用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调用是正常的.不知道是哪里出了问题.
但是有个接口调用过之后,会抛个异常,如下: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调用是正常的.不知道是哪里出了问题.
不知道是什么原因,纯帮楼主顶了。
# 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
C [VodCltApi.dll+0x1db27]
这里说明是你的c代码执行导致crash,一般就是从java向c函数传参数错误,导致执行的c代码出现问题。最好贴出你的java代码和c代码,以及传的参数是什么。
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 )
vc dll 有些变量放在栈上会导致java有些问题。