游戏中C++调用Java
来源:互联网 发布:科密e100如何导出数据 编辑:程序博客网 时间:2024/05/22 07:03
在游戏中,C++调用Java是很常见的,特别是在使用第三方SDK的时候。我仅仅写以下一些常用的调用方法。在使用之前,首先得包含相应的头文件。
- //#if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
- #include "platform/android/jni/JniHelper.h"
- #include <jni.h>
- //#endif
getStaticMethodInfo和getMethodInfo的最后一个参数如下图
1.静态无参数无返回值的函数
- #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)
- CCLog("--------------------->>>>>>>>>here ");
- JniMethodInfo minfo;
- bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/zhycheng/tt/CppCallJava","sayHello", "()V");
- CCLog("is have %d",isHave);
- if (!isHave) {
- CCLog("jni:此函数不存在");
- }else{
- CCLog("jni:此函数存在");
- //调用此函数
- minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID);
- }
- #endif
2.静态int参数无返回值的
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
- JniMethodInfo minfo;//定义Jni函数信息结构体
- //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
- bool isHave = JniHelper::getStaticMethodInfo(minfo,
- "com/zhycheng/tt/CppCallJava", "sayInt","(I)V");
- if (!isHave) {
- CCLog("jni:此函数不存在");
- }else{
- CCLog("jni:此函数存在");
- //调用此函数
- minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,1110);
- }
- CCLog("jni-java函数执行完毕");
- #endif
3.静态string参数无返回值的函数
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
- JniMethodInfo minfo;//定义Jni函数信息结构体
- //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
- bool isHave = JniHelper::getStaticMethodInfo(minfo,
- "com/zhycheng/tt/CppCallJava", "sayString","(Ljava/lang/String;)V");
- if (!isHave) {
- CCLog("jni:此函数不存在");
- }else{
- CCLog("jni:此函数存在");
- //调用此函数
- jstring jst = minfo.env->NewStringUTF("zhycheng");
- minfo.env->CallStaticVoidMethod(minfo.classID, minfo.methodID,jst);
- }
- CCLog("jni-java函数执行完毕");
- #endif
4.静态无参数string返回值的函数
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
- JniMethodInfo minfo;//定义Jni函数信息结构体
- //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
- bool isHave = JniHelper::getStaticMethodInfo(minfo,
- "com/zhycheng/tt/CppCallJava", "getPath","()Ljava/lang/String;");
- if (!isHave) {
- CCLog("jni:此函数不存在");
- }else{
- CCLog("jni:此函数存在");
- //调用此函数
- jstring str=(jstring) minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
- jboolean iscopy;
- CCLog("%s",minfo.env->GetStringUTFChars(str,&iscopy));
- }
- CCLog("jni-java函数执行完毕");
- #endif
5.非静态函数
先调用静态函数获得调用的对象,然后调用非静态函数,注意:非静态函数返回Object类型。
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID) //判断当前是否为Android平台
- JniMethodInfo minfo;//定义Jni函数信息结构体
- //getStaticMethodInfo 次函数返回一个bool值表示是否找到此函数
- bool isHave = JniHelper::getStaticMethodInfo(minfo,
- "com/zhycheng/tt/CppCallJava", "getInstance","()Ljava/lang/Object;");
- if (!isHave)
- {
- CCLog("jni:此函数不存在");
- }
- else
- {
- CCLog("jni:此函数存在");
- //调用此函数
- jobject obj= minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID);
- isHave=JniHelper::getMethodInfo(minfo,
- "com/zhycheng/tt/CppCallJava", "dosomething","()V");
- if(isHave)
- {
- CCLog("jni:dosomething 此函数存在");
- minfo.env->CallVoidMethod(obj, minfo.methodID);
- }
- else
- {
- CCLog("%s","dosomething isn't exist");
- }
- }
- CCLog("jni-java函数执行完毕");
- #endif
最后注意:C++调用的Java方法都是在非UI线程中。
0 0
- 游戏中C++调用Java
- 游戏中C++调用Java
- 游戏中C++调用Java
- Java中调用C库函数
- Java游戏中延迟下载资源及调用示例
- 如何在C/C++中调用Java
- 如何在C/C++中调用Java
- 如何在C/C++中调用Java
- 怎么样在C/C++中调用Java
- Android 在C/C++中调用Java
- Android 在C/C++中调用Java
- C中调用JAVA的参数、方法
- JNI编程中C调用Java实现。
- 如何在C/C++中调用Java
- JAVA中调用C语言接口
- java中调用C语言代码
- java中调用C语言代码
- JAVA中调用C语言方法
- 360的浏览器有关兼容问题
- Oracle中存储过程和函数的区别
- Hibernate generator小结
- 要成为Java高手需要注意的25个学习目标
- MVVM 设计模式中的控件加载、卸载
- 游戏中C++调用Java
- f4 uart have dma trouble
- wefghjkjhgfxcghmn,.;lkiuytrgbhnjuytf
- 媒体分析泰国政变:军方代表王室及枢密院行事
- Linux TTY 串口编程
- Android实现三级联动下拉框 下拉列表spinner
- Android 的各种组件
- 中文和自定义字体
- 数据包在内核态得捕获、修改和转发