【问题标题】:Getting Java object to C++ via JNI (Cocos2dx)通过 JNI (Cocos2dx) 获取 Java 对象到 C++
【发布时间】:2014-06-28 22:56:06
【问题描述】:

我遇到了一个问题,我需要访问自定义 java 类才能将其绑定到自定义 C++ 类(我正在为 Android 移植一个框架)。

我做过这样的事情:

        bool Myclass_Android::getBoolean() {
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
            cocos2d::JniMethodInfo methodInfo;
            if(cocos2d::JniHelper::getStaticMethodInfo(methodInfo, classInfo, "methodname", "()Z") == true){
                CCLOG("method exists");
                methodInfo.env->CallStaticBooleanMethod(methodInfo.classID, methodInfo.methodID);
            }else{
                CCLOG("method doesn't exist");
            }
#endif
        }

Pastebin:http://pastebin.com/y50nJzvR

从 Android 框架中检索布尔值。我可以像上面一样做一个完整的自定义 Java 类并访问它的成员吗?

只是为了清楚。我想使用的方法应该返回我创建的自定义 C++ 类。我只需要在方法范围内访问 Java 对象并将其成员绑定到 C++ 类。

我见过一些 JNIEXPORT void JNICALL 的东西,但我似乎无法理解它们或让这些东西正常工作的导入。

如果上面使用的方法也适用于自定义类,那就太好了,这将是一个救命稻草。

提前致谢!

【问题讨论】:

    标签: java c++ java-native-interface


    【解决方案1】:

    我通过使用这些方法设法解决了这个问题:

    jclass myClass = methodInfo.env->FindClass("com/your/package/class");
    

    这是对您想要工作的实际 Java 自定义对象的引用

    jfieldID someId = methodInfo.env->GetFieldID("com/your/package/class", "someId", "J");
    

    这将获取您要使用的字段。在这种情况下,一个 Long (J)。然后要实际使用它,您需要获取对象(在本例中是上面指定的类中的对象):

    jobject obj = (jobject) methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID);
    

    最后要将对象字段值从 Java 获取到 C++,您可以使用:

    long _someId = (long) methodInfo.env->GetLongField(obj, someId);
    

    P.S,我是作者。由于我目前驻扎在其他地方,所以没有时间切换帐户。

    【讨论】:

    • 现在我很好奇你为什么删除了你的另一个问题,因为我为此付出了一些努力。你解决问题了吗?那为什么不回答呢?如果问题是无关的,为什么不添加评论呢?
    猜你喜欢
    • 2014-01-30
    • 1970-01-01
    • 2011-12-21
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    相关资源
    最近更新 更多