从java(android)调用C ++(cocos2dx)方法进行应用程序内计费

时间:2013-05-28 12:50:48

标签: android-ndk java-native-interface in-app-purchase cocos2d-x in-app-billing

我正在尝试在我的cocos2dx-android项目中添加应用内结算。我可以通过jni从c ++类调用java函数。

这是我通过jni调用我的java函数的方式。

    JniMethodInfo t;
        JniHelper::getStaticMethodInfo(t
                , "com/test/project/Project" 
                , "BuyProduct" 
                , "(Ljava/lang/String;)V");

        char buffer[20];
        sprintf(buffer,"product1");
        jstring StringArg1 = t.env->NewStringUTF(buffer);

    t.env->CallStaticVoidMethod(t.classID, t.methodID, StringArg1);

应用内结算工作正常,但现在我必须回电话给我的c ++课程,以告知产品购买是否成功。

我只能通过提到指定的返回类型来返回被调用方法的结果,但是应用程序内进程是异步进程 - 经过大量的方法调用,我的控件不会返回到同一个方法。所以返回一个值是行不通的。

那么还有其他方法可以将一个值(在我的情况下是应用内购买的结果)从java函数传递给我的c ++类???

1 个答案:

答案 0 :(得分:3)

检查cocos2dxHelper.cpp文件,了解cocos2dx如何调用c ++方法。 基本上cocos2dxHelper.java中有一个方法只有定义而不是实现,通常看起来像

public static native blahblah();

在cpp文件中有一个名为

的相应函数
Java_org_cocos2dx_cocos2dxHelper_blahblah()

如果使用runOnUIThread()调用Java代码中的blahblah(),那么c ++函数

Java_org_cocos2dx_cocos2dxHelper_blahblah()

将被召唤。

顺便说一句,c ++代码必须是extern C { }