java 使用JNative 调用 dll 有关问题~

java 使用JNative 调用 dll 问题~ 在线等我用java jnative调用dll, 前面几个接口都是使用正常的.但是有个

java 使用JNative 调用 dll 问题~ 在线等
我用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 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=0x00010206

Top 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: None

Heap
 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.dll

VM Arguments:
jvm_args: -Dfile.encoding=GBK
java_command: com.telnet.eafs.modules.sftp.SftpUtil
Launcher Type: SUN_STANDARD

Environment 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 3

CPU:total 2 (cores per cpu 2, threads per core 1) family 6 model 7 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2

Memory: 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


[解决办法]
Problematic frame:
C [VodCltApi.dll+0x1db27]
这里说明是你的c代码执行导致crash,一般就是从java向c函数传参数错误,导致执行的c代码出现问题。最好贴出你的java代码和c代码,以及传的参数是什么。
[解决办法]
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\system32

sftp_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 )
[解决办法]
应该是传参数的问题,dll中接受的应该是指针吧,而你直接传的是string类型。