jni4net从c#返回值到java

时间:2015-02-04 14:44:50

标签: java c# jni4net

我使用jni4net从Java(Eclipse)调用我在C#(使用visual studio 2013)制作的库。 这是我的C#库的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ClassLibrary2
{
public class Class1
{   

    // Simple method that just prints a hard-coded string.
    public void Hello()
    {
        Console.WriteLine("Hello Java, from .NET!");
    }

    // Parameterized method that accepts a string
    public void Repeat(string line)
    {
        Console.WriteLine(line);
    }

    public int mult(int n)
    {
        return n*2;
    }
}
}

这是我的java代码:

import net.sf.jni4net.Bridge;
import net.sf.jni4net.Ref;

public class jni {

public static void main(String[] args) {
    try {
        //Bridge.setVerbose(true);
        Bridge.init();
        Bridge.LoadAndRegisterAssemblyFrom(new File("ClassLibrary2.j4n.dll"));

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Class1 c = new Class1();    

    c.Hello();
    c.Repeat("pippo");
    c.mult(2);        
}

}

我正在使用" proxygen"包含在jni4net数据包中的脚本,用于将mt C#代码包装到Java中。

当我调用函数"你好"和"重复"一切正常。 我得到了正确的输出,但在调用函数" mult"我收到以下错误:

# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (0xe0434352), pid=6808, tid=7100
#
# JRE version: Java(TM) SE Runtime Environment (8.0_11-b12) (build 1.8.0_11-    b12)
# Java VM: Java HotSpot(TM) Client VM (25.11-b03 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [KERNELBASE.dll+0xc42d]
#
# Failed to write core dump. Minidumps are not enabled by default on client  versions of Windows
#
# An error report file with more information is saved as:
# C:\ws\DLL\jni4net\hs_err_pid6808.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.sun.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

它还会生成一个日志文件,这里是:



---------------  T H R E A D  ---------------

Current thread (0x00dcc000):  JavaThread "main" [_thread_in_native, id=7100, stack(0x00e60000,0x00eb0000)]

siginfo: ExceptionCode=0xe0434352, ExceptionInformation=0x80131513 0x00000000 0x00000000 0x00000000 0x72450000 

Registers:
EAX=0x00eae5ec, EBX=0x00000005, ECX=0x00000005, EDX=0x00000000
ESP=0x00eae5ec, EBP=0x00eae63c, ESI=0x00eae6ac, EDI=0x00000001
EIP=0x7566c42d, EFLAGS=0x00000202

Top of Stack: (sp=0x00eae5ec)
0x00eae5ec:   e0434352 00000001 00000000 7566c42d
0x00eae5fc:   00000005 80131513 00000000 00000000
0x00eae60c:   00000000 72450000 00000001 00000000
0x00eae61c:   006d235c 001f0178 00000000 001f0150
0x00eae62c:   72461865 006d235c 00239dc0 00eae5f4
0x00eae63c:   00eae6e0 725a2a42 e0434352 00000001
0x00eae64c:   00000005 00eae6ac d1e7f1fc 1665aae0
0x00eae65c:   002a7da8 00eae798 00239dc0 00000001 

Instructions: (pc=0x7566c42d)
0x7566c40d:   02 50 ff 75 14 8d 45 c4 50 e8 57 ad 02 00 83 c4
0x7566c41d:   0c eb 03 89 45 c0 8d 45 b0 50 ff 15 5c 11 66 75
0x7566c42d:   c9 c2 10 00 cc cc cc cc cc 8b ff 55 8b ec 56 8b
0x7566c43d:   75 08 83 fe f4 72 18 83 fe f6 77 13 8d 45 08 50 


Register to memory mapping:

EAX=0x00eae5ec is pointing into the stack for thread: 0x00dcc000
EBX=0x00000005 is an unknown value
ECX=0x00000005 is an unknown value
EDX=0x00000000 is an unknown value
ESP=0x00eae5ec is pointing into the stack for thread: 0x00dcc000
EBP=0x00eae63c is pointing into the stack for thread: 0x00dcc000
ESI=0x00eae6ac is pointing into the stack for thread: 0x00dcc000
EDI=0x00000001 is an unknown value


Stack: [0x00e60000,0x00eb0000],  sp=0x00eae5ec,  free space=313k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [KERNELBASE.dll+0xc42d]
C  [clr.dll+0x152a42]
C  [clr.dll+0x2255ef]
C  [clr.dll+0x22de52]
C  [clrjit.dll+0x28df]
C  [clrjit.dll+0x290b]
C  [clrjit.dll+0x1d53]
C  [clrjit.dll+0x1f48]
C  [clrjit.dll+0x3405]
C  [clrjit.dll+0x3635]
C  [clrjit.dll+0x3823]
C  [clrjit.dll+0x36f6]
C  [clrjit.dll+0x385f]
C  [clr.dll+0x34710]
C  [clr.dll+0x347a9]
C  [clr.dll+0x347eb]
C  [clr.dll+0x33684]
C  [clr.dll+0x33920]
C  [clr.dll+0x41e5e]
C  [clr.dll+0x150b6]
C  [clr.dll+0x4279]
C  0x151d4d03
j  classlibrary2.Class1.mult(I)I+0
j  jni4net.jni.main([Ljava/lang/String;)V+43
v  ~StubRoutines::call_stub
V  [jvm.dll+0x142295]
V  [jvm.dll+0x2073ae]
V  [jvm.dll+0x14232e]
V  [jvm.dll+0xce7c7]
V  [jvm.dll+0xd6d6f]
C  [javaw.exe+0x20d8]
C  [javaw.exe+0xab91]
C  [javaw.exe+0xac1b]
C  [kernel32.dll+0x1338a]
C  [ntdll.dll+0x39f72]
C  [ntdll.dll+0x39f45]

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  classlibrary2.Class1.mult(I)I+0
j  jni4net.jni.main([Ljava/lang/String;)V+43
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x15c0ac00 JavaThread "Thread-0" daemon [_thread_in_native, id=5404, stack(0x15ef0000,0x15f40000)]
  0x007b9000 JavaThread "Service Thread" daemon [_thread_blocked, id=5452, stack(0x15ad0000,0x15b20000)]
  0x00788400 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=7312, stack(0x04700000,0x04750000)]
  0x00787400 JavaThread "Attach Listener" daemon [_thread_blocked, id=6992, stack(0x01240000,0x01290000)]
  0x00779400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=568, stack(0x15940000,0x15990000)]
  0x00776c00 JavaThread "Finalizer" daemon [_thread_blocked, id=4412, stack(0x15390000,0x153e0000)]
  0x00771c00 JavaThread "Reference Handler" daemon [_thread_blocked, id=5608, stack(0x151f0000,0x15240000)]
=>0x00dcc000 JavaThread "main" [_thread_in_native, id=7100, stack(0x00e60000,0x00eb0000)]

Other Threads:
  0x0076fc00 VMThread [stack: 0x04790000,0x047e0000] [id=5488]
  0x007ba800 WatcherThread [stack: 0x15a50000,0x15aa0000] [id=6180]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap:
 def new generation   total 4928K, used 3145K [0x04800000, 0x04d50000, 0x09d50000)
  eden space 4416K,  71% used [0x04800000, 0x04b12798, 0x04c50000)
  from space 512K,   0% used [0x04c50000, 0x04c50000, 0x04cd0000)
  to   space 512K,   0% used [0x04cd0000, 0x04cd0000, 0x04d50000)
 tenured generation   total 10944K, used 0K [0x09d50000, 0x0a800000, 0x14800000)
   the space 10944K,   0% used [0x09d50000, 0x09d50000, 0x09d50200, 0x0a800000)
 Metaspace       used 532K, capacity 2664K, committed 2752K, reserved 4480K

Card table byte_map: [0x00ce0000,0x00d70000] byte_map_base: 0x00cbc000

Polling page: 0x000c0000

CodeCache: size=32768Kb used=748Kb max_used=748Kb free=32020Kb
 bounds [0x02700000, 0x027c0000, 0x04700000]
 total_blobs=203 nmethods=59 adapters=76
 compilation: enabled

Compilation events (10 events):
Event: 0.371 Thread 0x00788400   54             java.nio.DirectLongBufferU::ix (10 bytes)
Event: 0.371 Thread 0x00788400 nmethod 54 0x027ba008 code [0x027ba100, 0x027ba190]
Event: 0.382 Thread 0x00788400   56             java.lang.AbstractStringBuilder::expandCapacity (50 bytes)
Event: 0.383 Thread 0x00788400 nmethod 56 0x027ba448 code [0x027ba560, 0x027ba798]
Event: 0.400 Thread 0x00788400   57             java.lang.String::endsWith (17 bytes)
Event: 0.401 Thread 0x00788400 nmethod 57 0x027ba8c8 code [0x027ba9d0, 0x027baa7c]
Event: 0.424 Thread 0x00788400   58             java.lang.String::indexOf (25 bytes)
Event: 0.424 Thread 0x00788400 nmethod 58 0x027bab48 code [0x027bac50, 0x027bad1c]
Event: 0.424 Thread 0x00788400   59             java.util.HashMap::hash (20 bytes)
Event: 0.424 Thread 0x00788400 nmethod 59 0x027bae08 code [0x027baf00, 0x027baf9c]

GC Heap History (0 events):
No events

Deoptimization events (0 events):
No events

Internal exceptions (10 events):
Event: 0.423 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04adeeb0) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.423 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04ae0e20) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.424 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04ae2d68) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.425 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04ae4b50) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.425 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04afceb0) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.426 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04afef48) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.426 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04b00ef0) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.429 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04b03080) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.430 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04b05ee0) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]
Event: 0.444 Thread 0x00dcc000 Exception <a 'java/security/PrivilegedActionException'> (0x04b099f8) thrown at [D:\re\puppet\workspace\8-2-build-windows-i586-cygwin\jdk8u11\648\hotspot\src\share\vm\prims\jvm.cpp, line 1248]

Events (10 events):
Event: 0.425 loading class system/IFormattable_
Event: 0.425 loading class system/IFormattable_ done
Event: 0.426 loading class system/__IFormattable
Event: 0.426 loading class system/__IFormattable done
Event: 0.429 loading class system/NotSupportedException
Event: 0.429 loading class system/NotSupportedException done
Event: 0.430 loading class system/NullReferenceException
Event: 0.430 loading class system/NullReferenceException done
Event: 0.444 loading class classlibrary2/Class1
Event: 0.444 loading class classlibrary2/Class1 done


Dynamic libraries:
0x012d0000 - 0x01300000 	C:\Program Files (x86)\Java\jre8\bin\javaw.exe
0x77710000 - 0x77890000 	C:\Windows\SysWOW64\ntdll.dll
0x75fc0000 - 0x760d0000 	C:\Windows\syswow64\kernel32.dll
0x75660000 - 0x756a7000 	C:\Windows\syswow64\KERNELBASE.dll
0x760d0000 - 0x76170000 	C:\Windows\syswow64\ADVAPI32.dll
0x757a0000 - 0x7584c000 	C:\Windows\syswow64\msvcrt.dll
0x75770000 - 0x75789000 	C:\Windows\SysWOW64\sechost.dll
0x75560000 - 0x75650000 	C:\Windows\syswow64\RPCRT4.dll
0x750b0000 - 0x75110000 	C:\Windows\syswow64\SspiCli.dll
0x750a0000 - 0x750ac000 	C:\Windows\syswow64\CRYPTBASE.dll
0x75440000 - 0x75540000 	C:\Windows\syswow64\USER32.dll
0x752a0000 - 0x75330000 	C:\Windows\syswow64\GDI32.dll
0x75430000 - 0x7543a000 	C:\Windows\syswow64\LPK.dll
0x751a0000 - 0x7523d000 	C:\Windows\syswow64\USP10.dll
0x6f920000 - 0x6fabe000 	C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2\COMCTL32.dll
0x75330000 - 0x75387000 	C:\Windows\syswow64\SHLWAPI.dll
0x75c30000 - 0x75c90000 	C:\Windows\system32\IMM32.DLL
0x75b60000 - 0x75c2c000 	C:\Windows\syswow64\MSCTF.dll
0x52640000 - 0x526ff000 	C:\Program Files (x86)\Java\jre8\bin\msvcr100.dll
0x68230000 - 0x685c7000 	C:\Program Files (x86)\Java\jre8\bin\client\jvm.dll
0x74d40000 - 0x74d47000 	C:\Windows\system32\WSOCK32.dll
0x753f0000 - 0x75425000 	C:\Windows\syswow64\WS2_32.dll
0x75540000 - 0x75546000 	C:\Windows\syswow64\NSI.dll
0x74cd0000 - 0x74d02000 	C:\Windows\system32\WINMM.dll
0x758e0000 - 0x758e5000 	C:\Windows\syswow64\PSAPI.DLL
0x6b830000 - 0x6b83c000 	C:\Program Files (x86)\Java\jre8\bin\verify.dll
0x68200000 - 0x68221000 	C:\Program Files (x86)\Java\jre8\bin\java.dll
0x681e0000 - 0x681f3000 	C:\Program Files (x86)\Java\jre8\bin\zip.dll
0x76520000 - 0x7716a000 	C:\Windows\syswow64\SHELL32.dll
0x75e60000 - 0x75fbc000 	C:\Windows\syswow64\ole32.dll
0x75280000 - 0x7528b000 	C:\Windows\syswow64\profapi.dll
0x52de0000 - 0x52dea000 	C:\ws\DLL\jni4net\jni4net.n.w32.v40-0.8.8.0.dll
0x74420000 - 0x7446a000 	C:\Windows\SYSTEM32\MSCOREE.DLL
0x743a0000 - 0x7441b000 	C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
0x72450000 - 0x72aeb000 	C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
0x72370000 - 0x72443000 	C:\Windows\system32\MSVCR110_CLR0400.dll
0x711b0000 - 0x721de000 	C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\ce5f61c5754789df97be8dc991c47d07\mscorlib.ni.dll
0x72250000 - 0x72266000 	C:\Windows\system32\CRYPTSP.dll
0x72210000 - 0x7224b000 	C:\Windows\system32\rsaenh.dll
0x71060000 - 0x710dd000 	C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
0x75ad0000 - 0x75b5f000 	C:\Windows\syswow64\OLEAUT32.dll
0x763d0000 - 0x7651a000 	C:\Windows\syswow64\urlmon.dll
0x75270000 - 0x75274000 	C:\Windows\syswow64\api-ms-win-downlevel-ole32-l1-1-0.dll
0x776e0000 - 0x776e4000 	C:\Windows\syswow64\api-ms-win-downlevel-shlwapi-l1-1-0.dll
0x75720000 - 0x75725000 	C:\Windows\syswow64\api-ms-win-downlevel-advapi32-l1-1-0.dll
0x75730000 - 0x75734000 	C:\Windows\syswow64\api-ms-win-downlevel-user32-l1-1-0.dll
0x75290000 - 0x75294000 	C:\Windows\syswow64\api-ms-win-downlevel-version-l1-1-0.dll
0x74e80000 - 0x74e89000 	C:\Windows\system32\version.DLL
0x75650000 - 0x75653000 	C:\Windows\syswow64\api-ms-win-downlevel-normaliz-l1-1-0.dll
0x75790000 - 0x75793000 	C:\Windows\syswow64\normaliz.DLL
0x76170000 - 0x763a2000 	C:\Windows\syswow64\iertutil.dll
0x758f0000 - 0x75ac6000 	C:\Windows\syswow64\WININET.dll
0x763b0000 - 0x763c7000 	C:\Windows\syswow64\USERENV.dll
0x705f0000 - 0x705f8000 	C:\Windows\system32\Secur32.dll
0x6c170000 - 0x6c174000 	C:\Windows\system32\api-ms-win-downlevel-advapi32-l2-1-0.dll
0x70000000 - 0x70012000 	C:\Windows\Microsoft.NET\Framework\v4.0.30319\nlssorting.dll
0x70600000 - 0x70fa4000 	C:\Windows\assembly\NativeImages_v4.0.30319_32\System\17a393b77ae757f0768501fb95ff5af6\System.ni.dll
0x70520000 - 0x7052e000 	C:\Windows\system32\RpcRtRemote.dll
0x6f820000 - 0x6f90b000 	C:\Windows\system32\dbghelp.dll

VM Arguments:
jvm_args: -Dfile.encoding=Cp1252 
java_command: jni4net.jni
java_class_path (initial): C:\ws\DLL\jni4net\bin;C:\ws\DLL\jni4net\jni4net.j-0.8.8.0.jar;C:\ws\DLL\jni4net\ClassLibrary2.j4n.jar
Launcher Type: SUN_STANDARD

Environment Variables:
CLASSPATH=.;C:\Program Files (x86)\Java\jre7\lib\ext\QTJava.zip
PATH=C:/Program Files (x86)/Java/jre8/bin/client;C:/Program Files (x86)/Java/jre8/bin;C:/Program Files (x86)/Java/jre8/lib/i386;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\CodeBlocks\MinGW\bin;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\ ;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\GitExtensions\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Users\Marco\Desktop\eclipse;
USERNAME=Marco
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 42 Stepping 7, GenuineIntel



---------------  S Y S T E M  ---------------

OS: Windows 7 , 64 bit Build 7601 Service Pack 1

CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, aes, clmul, ht, tsc, tscinvbit

Memory: 4k page, physical 4072380k(1064400k free), swap 8142896k(4029200k free)

vm_info: Java HotSpot(TM) Client VM (25.11-b03) for windows-x86 JRE (1.8.0_11-b12), built on Jun 16 2014 18:18:58 by "java_re" with MS VC++ 10.0 (VS2010)

time: Wed Feb 04 15:24:40 2015
elapsed time: 0 seconds
&#13;
&#13;
&#13;

问题在于我无法弄清楚如何将c#库中的值返回给Java ...

我还尝试修改函数的参数:

public int mult(ref int n)

然后在Java中:

 Ref<Integer> a = new Ref<Integer>(4);
 c.mult(a);

但我似乎得到了同样的错误。我该怎么办?

谢谢您的建议,Stefano

1 个答案:

答案 0 :(得分:0)

通常情况下,您更改了方法的签名但忘记使用proxygen重新生成它并重新编译代理dll / jar。 如果这没有帮助,请发布生成的代码。