4

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 ++クラスに値(私の場合はアプリ内購入の結果)を渡す他の方法はありますか???

4

1 に答える 1

3

cocos2dxHelper.cpp ファイルをチェックして、cocos2dx が c++ メソッドを呼び出す方法を確認してください。基本的にcocos2dxHelper.java、実装ではなく定義のみを持つメソッドがあり、通常は次のようになります

public static native blahblah();

と呼ばれるcppファイルに対応する関数があります

Java_org_cocos2dx_cocos2dxHelper_blahblah()

blahblah()runOnUIThread() を使用して Java コードで を呼び出すと、c++ 関数

Java_org_cocos2dx_cocos2dxHelper_blahblah()

が呼び出されます。

ちなみに、C++コードは何かにある必要がありますextern C { }

于 2013-05-31T03:18:58.200 に答える