2017-11-03 1 views
0

, C#으로 I는Java가 다른 언어에서받은 정적 메서드의 대리자를 받고 호출 할 수 있습니까? 예를 들어

[MonoPInvokeCallback(typeof(PointDelegate))] 
public static void Callback(int x, int y) 
{ .... } 

이 방법은 서명 복귀 공극 (INT, INT)의 위임에 저장되어있다.

public delegate void PointDelegate(int x, int y); 

나는 거기 내가 Callback()를 호출하는 직접 호출 할 수 있었다 오브젝티브 C이 위임 변수를 전송합니다. 그냥 작동합니다.

C#

objC(Callback); 

목표 - C

typedef void (*PointDelegate)(int x, int y); 
void objC(PointDelegate delegateFromCSharp) 
{ 
    delegateFromCSharp(1,2); 
} 

자바에 상응하는 무엇입니까

를 (I 일치하는 목표 - C 측에 해당하는 typedef를 선언 한)? Java에서 메서드를 호출 할 수 있고 대리자가 유일한 매개 변수로 전달된다고 가정하면 해당 Java 메서드의 서명은 무엇입니까? 그리고받은 대리인을 호출하는 방법?

+1

네이티브라고합니다. 예를 들어 Thread의 구현을 보라. http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Thread.java – Noixes

+1

자바는 델리게이트 개념이 없다. 기능 인터페이스 및 메소드 참조를 사용할 수 있습니다 (https://stackoverflow.com/questions/39346343/java-equivalent-of-c-sharp-delegates-queues-methods-of-various-classes-to-be-ex 참조) . –

답변

0

나는 그것을 작동시킬 수 있었다. 이 솔루션은 Unity의 "AndroidJavaProxy" 클래스를 사용하므로 순수 JNI가 무엇인지 잘 모릅니다. 그러나 나는 그것이 나의 경우에 효과적이기 때문에 기쁘다.

public class IntInterface : AndroidJavaProxy 
{ 
    public IntInterface() : base("com.YourCompany.YourApp.YourClass$IntInterface") { } 
    void Call(int i) 
    { 
     Debug.Log("Java says : " + i); 
    } 
} 

가 그럼 난 매개 변수로 new IntInterface() 자바에서 정적 메소드를 호출

이 C 번호입니다.

자바 측에서는 기다리는 인터페이스가 있습니다. JNI : unknown signature for type을 더 이상 던지지 않고 C# 측에서 IntInterface을 수락 할 수 있습니다. Call도 C# 1과 일치합니다.

public static void StaticMethod(IntInterface intInterface) { 
     intInterface.Call(555); 
    } 

    @FunctionalInterface 
    public static interface IntInterface{ 
     void Call(int i); 
    } 

결과는 그냥 자바에서 매개 변수를 사용하여 C#을 방법 Call(int i) 호출 "Java says : 555"입니다.

관련 문제