2012-01-28 56 views
1

我在發現jni4net。這是用來提供Java和.NET之間橋樑的技術。因此,我創建了一個新的Eclipse Java項目,並將示例代碼從jni4net-0.8.6.0-bin/samples/myCSharpDemoCalc-> MyCalcUsageInJava.java複製到此項目中。但是,無法編譯代碼,因爲找不到兩個導入「mycsharpdemocalc.DemoCalc」和「mycsharpdemocalc.ICalc」。我不明白如何將mycsharpdemocalc.c集成/導入到Java項目中,以便編譯代碼。發現jni4net樣本

import net.sf.jni4net.Bridge; 

import java.io.IOException; 

import mycsharpdemocalc.DemoCalc; 
import mycsharpdemocalc.ICalc; 

public class MyCalcUsageInJava { 
    public static void main(String arsg[]) throws IOException { 
     Bridge.init(); 
     Bridge.LoadAndRegisterAssemblyFrom(new java.io.File("MyCSharpDemoCalc.j4n.dll")); 

     ICalc calc = new DemoCalc(); 
     final int result = calc.MySuperSmartFunctionIDontHaveInJava("Answer to the Ultimate Question of Life, the Universe, and Everything"); 

     System.out.printf("Answer to the Ultimate Question is : " + result); 
    } 
} 
+0

是類路徑上的類還是jar? – 2012-01-28 20:48:09

+0

唯一包含此示例的是Calc.cs,MyCSharpDemoCalc.c,MyCSharpDemoCalc.sln,MyCalcUsageInJava.java和MyCSharpDemoCalc.dll。所以我把MyCSharpDemoCalc.dll放到類路徑中,但代碼仍然不能編譯。 – 2012-01-28 21:28:17

+0

@YouKuper你解決了這個問題嗎?我有同樣的問題... – davioooh 2012-02-01 11:47:10

回答

1

每個樣本目錄中都有ReadMe。 您必須使用proxygen工具來生成代理(用於java代碼中)。 有generateProxies.cmd批處理來做到這一點。 更復雜的事情可能需要proxygen的配置文件。

此外還有社區Wiki

+0

編譯完這個項目後,我試着運行它。顯示出下面的錯誤消息:異常在線程 「主要」 java.lang.UnsatisfiedLinkError中:mycsharpdemocalc.DemoCalc .__ ctorDemoCalc0(LNET/SF/jni4net /注射/ IClrProxy;)V \t在mycsharpdemocalc.DemoCalc .__ ctorDemoCalc0(本機方法) \t at mycsharpdemocalc.DemoCalc。 (MyCalcUsageInJava.java:13)上的(DemoCalc.java:25) \t。什麼是錯的,你能告訴我嗎? – 2012-01-29 10:46:31

+0

我猜你忘了初始化橋。或者你沒有註冊所有的DLL。 – 2012-01-30 12:53:52

+0

@PavelSavara我有使用你的庫相同的問題。我已經加載了我的dll文件,並將它放在我的lib文件夾中,包括'jni4net.j-0.8.6.0.jar', 'jni4net.n-0.8.6.0.dll'和'jni4net.n.w32.v40-0.8.6.0 .dll'。 Proxygen在jvm文件夾中生成一個java類,在clr文件夾中生成一個cs文件。我只使用第一個。這是對的嗎? – davioooh 2012-02-01 10:43:09

相關問題