2012-05-24 117 views
4

我有這段代碼來創建一個簡單的.NET .dll。它只返回一個int如何從Java調用.NET dll

但是,它不在Java內部工作。

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

namespace ReturnINT 
{ 
    public class ReturnINT 
    { 

     public static int RetornaInteiro() 
     { 
      try 
      { 
       int number = 2; 

       return number; 
      } 
      catch (Exception) 
      { 
       return 1; 
      } 
     } 
    } 
} 

如何從Java內部調用該方法?

當我使用JNI我有這個錯誤在Java:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Dll.RetornaInteiro()V 
     at Dll.RetornaInteiro(Native Method) 
     at Dll.main(Dll.java:27) 
+3

目前還不清楚你將如何期望*使用Java庫中的.NET庫......你打算試圖使用JNI嗎? –

+5

可能的重複** [從Java調用C#代碼?](http://stackoverflow.com/questions/50398/calling-c-sharp-code-from-java)**和** [從C#調用C#dll應用程序](http://stackoverflow.com/questions/7992684/call-c-sharp-dll-from-a-java-application)** –

+0

@Jon:Sun Java是否與COM對象互操作? Microsoft JVM確實。 –

回答

4

您可以直接調用它:http://jni4net.sourceforge.net/

或者你可以把它作爲一個可執行文件。

+0

當我把java放在Dll.RetornaInteiro(本地方法) 在Dll.main(Dll.java:27)時,出現此錯誤:線程「main」java.lang.UnsatisfiedLinkError中的異常:Dll.RetornaInteiro()V ) – soamazing

+0

@soamazing - https://groups.google.com/group/jni4net/browse_thread/thread/c8877ceb2bb81a57 –

3

檢查http://www.javonet.com以及。隨着一個jar文件,你可以加載這個DLL,並調用如下:

Javonet.AddReference("your-lib.dll"); 
int result = Javonet.getType("ReturnINT").Invoke("RetornaInteiro"); 

Javonet會自動加載你的庫在.NET過程,讓您使用任何類和類型都包含在其中。接下來,您可以獲取您的類型並調用靜態方法。方法結果和參數在JAVA和.NET類型之間自動轉換。您可以通過例如字符串或布爾參數一樣,

Boolean arg1 = true; 
String arg2 = "test"; 
Javonet.getType("ReturnINT").Invoke("MethodWithArguments",arg1,arg2); 

,他們將被自動翻譯。此外,您還可以創建類型實例,訂閱事件,設置/獲取屬性和字段,處理異常甚至傳遞值類型參數。檢查文檔的更多細節:

http://www.javonet.com/quick-start-guide/

PS:我Javonet團隊的一員。因此,隨時問我關於本地集成和我們的產品的任何詳細問題。

+0

謝謝,但你應該透露你對javonet的興趣 - 但是stackoverflow不應該是一個宣傳你的產品的地方,但是它是好的。我將此標記爲垃圾郵件。 – icedwater

+2

你好,的確,我與Javonet有關聯,並且我在這個主題的多個其他主題中透露了這一點。我們還報告說,管理自己並與他們討論關於我們的線索,留下那些真正有用而不是垃圾郵件。感謝您的警惕。此線程舊,因此未更新。 –

+1

@PrzemysławŁadyński - 您應該向「公司/網站」披露與「所有答案」中包含的任何關聯。不這樣做會讓人們相信這是垃圾郵件。請編輯您的答案:) – TheLostMind