2012-05-24 9 views
4

간단한 .NET .dll을 만들려면이 코드가 필요합니다. int 만 반환합니다.Java에서 .NET dll을 호출하는 방법

그러나 자바에서는 작동하지 않습니다.

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를 사용하면

난 자바에서이 오류가 있습니다 http://jni4net.sourceforge.net/

을 또는 당신은 실행 파일로 호출 할 수 있습니다

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) ** 및 ** [Java에서 C# DLL 호출 응용 프로그램] (http://stackoverflow.com/questions/7992684/call-c-sharp-dll-from-a-java-application) ** –

+0

@ 존 : Sun Java는 COM 객체와 상호 작용합니까? Microsoft JVM이 수행했습니다. –

답변

4

직접 호출 할 수 있습니다.

+0

내가 자바에 넣을 때 나는이 오류가있다 : 스레드 "main"의 예외 java.lang.UnsatisfiedLinkError : Dll.RetornaInteiro() V at Dll.RetornaInteiro (네이티브 메소드) at Dll.main (Dll.java:27)) – 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

감사합니다.하지만 javanet에 관심을 가져야합니다. - stackoverflow는 제품을 광고 할 장소가 아니어야합니다. 좋다. 나는 이것을 스팸으로 신고했다. – icedwater

+2

안녕하세요, 사실 Javonet과 관련이 있습니다.이 주제의 여러 다른 스레드에서이를 공개했습니다. 우리는 또한 관리자에게이를 알리고 스레드와 관련하여 토론을 진행하여 스팸이 아닌 진정으로 도움이되는 메시지를 남겼습니다. 조심해 줘서 고마워. 이 스레드는 오래되었으므로 업데이트되지 않았습니다. –

+1

@ PrzemysławŁadyński - 귀하는 "모든 답변"에 포함 된 회사/웹 사이트에 대한 제휴를 공개해야합니다. 그렇게하지 않으면 사람들이 이것이 스팸이라고 믿게 할 것입니다.답변을 수정하십시오 :) – TheLostMind

관련 문제