例如,在C#中我有
[MonoPInvokeCallback(typeof(PointDelegate))]
public static void Callback(int x, int y)
{ .... }
此方法存储在签名return void(int,int)的委托中。
public delegate void PointDelegate(int x, int y);
我将此委托变量发送到Objective-C,然后在那里我可以直接调用它来调用Callback()
。它只是有效。 (我已在Objective-C方面宣布等效的typedef
来匹配)
C#
objC(Callback);
目标-C
typedef void (*PointDelegate)(int x, int y);
void objC(PointDelegate delegateFromCSharp)
{
delegateFromCSharp(1,2);
}
Java中的等价物是什么?假设我已经可以在Java中调用一个方法并且委托作为唯一参数传递,那么该Java方法的签名是什么?以及如何调用收到的代表?
答案 0 :(得分:0)
我设法让它发挥作用。这个解决方案使用Unity的"AndroidJavaProxy"类,所以我不确定它将使用纯JNI。但我很高兴它适用于我的情况。
这是C#:
public class IntInterface : AndroidJavaProxy
{
public IntInterface() : base("com.YourCompany.YourApp.YourClass$IntInterface") { }
void Call(int i)
{
Debug.Log("Java says : " + i);
}
}
然后我用Java new IntInterface()
作为参数调用静态方法。
在Java端,我有一个匹配的接口等待。它可以接受来自C#端的IntInterface
而不再抛出JNI : unknown signature for type
。 Call
也与C#匹配。
public static void StaticMethod(IntInterface intInterface) {
intInterface.Call(555);
}
@FunctionalInterface
public static interface IntInterface{
void Call(int i);
}
结果是"Java says : 555"
我刚用Java中的参数调用了C#方法Call(int i)
。