【发布时间】:2014-03-04 17:42:03
【问题描述】:
我正在尝试从 C# 调用 Java 方法,它从 java 中是这样调用的:
EgamePay.pay(thisActivity, payAlias, new EgamePayListener() {
@Override
public void paySuccess(String alias) {
}
@Override
public void payFailed(String alias, int errorInt) {
}
@Override
public void payCancel(String alias) {
}
});
前两个参数没问题,但是如何在C#中传递EgamePayListner呢?简单地创建一个具有相同功能的 C# 类是行不通的......
这是我目前正在做的事情:
using (AndroidJavaClass jc = new AndroidJavaClass("cn.egame.terminal.smspay.EgamePay"))
{
System.IntPtr cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
System.IntPtr fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
object[] p = { fid_Activity, "payAlias", new EgamePayListener() };
jc.CallStatic("pay", p);
}
..
class EgamePayListener
{
public void paySucess(string alias)
{
}
public void payFailed(string alians, int errorInt)
{
}
public void payCancel(string alias)
{
}
}
显然这是错误的,我该如何处理这种情况,以便在触发这些函数时在 C# 领域得到通知?
【问题讨论】:
-
The first two parameters are ok怎么样?显示您的代码.. -
公平调用,我认为它们是因为它们是基本类型,但我添加了我试图通过 C# 调用它的方式
-
@soshiki 您将无法直接将 C# 类提供给 Java。最多可以给它一个地址指针,然后在native层访问对象。
-
@Samhain 最终我的目标是能够调用这些函数,然后让 C# 代码知道它,这样做的正确方法是什么?
-
@soshiki 您可以创建多个图层以按照自己的方式在语言之间工作。最后,您将拥有:C# 层、C++/CLI 层、C/C++ JNI 层、Java 层。任何层都只能与它旁边的层“对话”(例如,C++/CLI 层可以与 C# 和 C/C++ JNI“对话”。)
标签: c# java java-native-interface unity3d