java c++ jin调用

1 java调用c++

在java中声明本地方法。在java中调用本地方法,回调c++。

public static native void onImageSaved(String path);

在c++中实现上述声明的方法

//--------Java回调C++--------native 方法
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

extern "C"
{
    void Java_org_cocos2dx_cpp_ImagePicker_onImageSaved(JNIEnv *env,jobject thiz,jstring path)
    {
        std::string strPath = JniHelper::jstring2string(path);
        Director::getInstance()->getScheduler()->performFunctionInCocosThread([strPath]()mutable{
            Director::getInstance()->getEventDispatcher()->dispatchCustomEvent("ImagePickerEvent",&strPath);
            log("========000-path:%s",strPath.c_str());
        });
    }
}

#endif

该方法名的声明是固定的。

Java_org_cocos2dx_cpp_ImagePicker_onImageSaved

Java_src文件夹下的文件名_java中声明该方法的类名_java中声明的方法名

方法中的参数

JNIEnv  jni本地接口

jobject

剩下的为声明方法中的参数,需要进行相应的转换。

2 c++调用java

#if ( CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID )
#include <jni.h>
#include "platform/android/jni/JniHelper.h"
     
   JniMethodInfo methodInfo;  //jni函数信息结构体
        
        bool isHave = JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/cpp/AppActivity","sendAutoReq","()V");
        if (isHave)
        {
            //调用这个函数
            methodInfo.env->CallStaticVoidMethod(methodInfo.classID, methodInfo.methodID); //CallStaticVoidMethod
            log("----jni调用完成");
        } else{
            log("----jni调用失败");
        }
#endif

}

根据方法类型的不同调用不同方法。具体查阅JniHelper.h。

获取静态方法 getStaticMethodInfo

调用静态方法 CallStaticVoidMethod

猜你喜欢

转载自blog.csdn.net/ChangeNew/article/details/82464949