纳金网
标题:
JniHepleer——实现C++调用Java代码
[打印本页]
作者:
王者再临
时间:
2014-8-30 01:41
标题:
JniHepleer——实现C++调用Java代码
①加入头文件
将Jdk中的"include/jni.h"和“include/win32/jni_md.h”拷贝到VS201X安装目录的"VC/include"下
②包含头文件
#include "../android/jni/JniHelper.h"
#include "jni.h"
③C++中代码(主要的)
//jni调用测试
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo info;
//bool isHave = JniHelper::getStaticMethodInfo(info, "com/lch/myGame", "function", "()V"); //()中为参数类型,V为返回值类型
//bool isHave = JniHelper::getStaticMethodInfo(info, "com/lch/myGame", "function1", "(Ljava/lang/String;)V");
//bool isHave = JniHelper::getStaticMethodInfo(info, "com/lch/myGame", "function2", "()Ljava/lang/String;");
//bool isHave = JniHelper::getStaticMethodInfo(info, "com/lch/myGame", "function3", "(II)I");
bool isHave = JniHelper::getStaticMethodInfo(info, "com/lch/myGame", "getObject", "()Ljava/lang/Object;");
jobject jobj;
if (isHave)
{
CCLog("C++ : The function is exist");
//无参数无返回值
//info.env->CallStaticVoidMethod(info.classID, info.methodID);
//有参数无返回值
/*jstring str = info.env->NewStringUTF("msg");
info.env->CallStaticVoidMethod(info.classID, info.methodID, str);*/
//无参数有返回值
/*jstring jstr = (jstring)info.env->CallStaticObjectMethod(info.classID, info.methodID);
std::string str = JniHelper::jstring2string(jstr);
CCLog("C++ : %s", str.c_str());*/
//有参数有返回值
/*jint x = 10;
jint y = 20;
jint jRes = info.env->CallStaticIntMethod(info.classID, info.methodID, x, y);
CCLog("C++ : result: %d", jRes);*/
//调用动态方法步骤一
jobj = info.env->CallStaticObjectMethod(info.classID, info.methodID);
}
else
{
CCLog("C++ : The function is not exist");
}
isHave = JniHelper::getMethodInfo(info, "com/lch/myGame", "function4", "()V");
if (isHave)
{
CCLog("C++ : The function is exist");
//调用动态方法步骤二
info.env->CallVoidMethod(jobj, info.methodID);
}
else
{
CCLog("C++ : The function is not exist");
}
#endif
④Java中代码(主要的)
public static myGame instance;
public static Handler handler;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
// 退出游戏
Builder builder = new Builder(FlyGame.this);
builder.setTitle("亲!确定要退出游戏吗?")
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
System.exit(0);
}
}).setNegativeButton("取消", null).show();
default:
break;
}
}
};
}
public static void function(){
System.out.println("Java: " +"无参无返回值");
}
public static void function1(String str){
System.out.println("Java: " +"有参无返回值 " + str);
}
public static String function2(){
System.out.println("Java: " +"无参有返回值 ");
return "Java return msg";
}
public static int function3(int x, int y){
System.out.println("Java: " +"有参有返回值 ");
return x + y;
}
public static Object getObject(){
System.out.println("Java: " +"返回一个实例 ");
return instance;
}
public void function4(){
System.out.println("Java: " +"非静态函数 ");
buyProp();
}
public static void exitGame(){
Message msg = Message.obtain();
msg.what = 1;
handler.sendMessage(msg);
System.out.println("Java: " +"退出游戏确认 ");
}
作者:
hyui
时间:
2014-8-30 17:50
Good to know !
欢迎光临 纳金网 (http://old.narkii.com/club/)
Powered by Discuz! X2.5