cocos2d-html5 javascript 通过C++绑定,调用java方法
1、java中的写法
/*
* XConnectPlugin.java
*
* Created on: 2014年4月30日
* Author: lswdonald9@gmail.com
*/
package org.cocos2dx.commonSDK; import android.util.Log; public class XConnectPlugin {
public static void start(String str) {
Log.d("mylog ", "str>>" + str);
}
}
2、C++中的写法
头文件(XInterface.h)声明方法:
/*
* XInterface.h
*
* Created on: 2014年4月30日
* Author: lswdonald9@gmail.com
*/ #ifndef XINTERFACE_H_
#define XINTERFACE_H_ #include "string" class XInterface {
public:
static void start(const char* ct);
}; #endif /* XINTERFACE_H_ */
XInterface.cpp中写法:
/*
* XInterface.cpp
*
* Created on: 2014年4月30日
* Author: lswdonald9@gmail.com
*/
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "XInterface.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
#include "ScriptingCore.h" XInterface::XInterface() {
} XInterface::~XInterface() {
} const char* XJavaClassName = "org/cocos2dx/commonSDK/XConnectPlugin"; void XInterface::start(const char* cLevel) {
JniMethodInfo t;
if (JniHelper::getStaticMethodInfo(t, XJavaClassName, "start", "(Ljava/lang/String;)V")) {
if (cLevel) {
jstring jLevel = t.env->NewStringUTF(cLevel);
t.env->CallStaticVoidMethod(t.classID, t.methodID, jLevel);
t.env->DeleteLocalRef(jLevel);
}
t.env->DeleteLocalRef(t.classID);
}
} #endif
以上部分是C++调用到java的方法,start(string)。
3、以下部分是,在SpritMonkey中注冊C++方法到javascript中
js_bindings_X.cpp
/*
* jsbindingsX.cpp
*
* Created on: 2014年4月30日
* Author: lswdonald9@gmail.com
*/ #include "ScriptingCore.h"
#include "XInterface.h" JSBool JSB_X_start(JSContext *cx, uint32_t argc, jsval *vp){ std::string str;
if(argc == 1)
{
jsval *argv = JS_ARGV(cx, vp);
jsval_to_std_string(cx, argv[0], &str);
XInterface::start(str.c_str());
} return JS_TRUE;
} void register_X_js(JSContext* cx, JSObject* global){
jsval nsval;
JSObject *XJsbObject; JS_GetProperty(cx, global, "XJsb", &nsval);
if (nsval == JSVAL_VOID) {
XJsbObject = JS_NewObject(cx, NULL, NULL, NULL);
nsval = OBJECT_TO_JSVAL(XJsbObject);
JS_SetProperty(cx, global, "XJsb", &nsval);
} else
JS_ValueToObject(cx, nsval, &XJsbObject); JS_DefineFunction(cx, XJsbObject, "start", JSB_X_start, 1, JSPROP_READONLY | JSPROP_PERMANENT);
}
然后在javascript中,这样声明:
var XJsb = XJsb || {
start : function () {
}
};
注意。这里的XJsb跟c++ 中的register_x_js 保持一致.
然后在,须要调用的地方。触发:
XJsb.start("from javaScript");
须要注意,在AppDelegate.cpp中。增加
extern void register_X_js(JSContext* cx, JSObject* global);
和
ScriptingCore* sc = ScriptingCore::getInstance();
sc->addRegisterCallback(register_X_js);
在Android.mk中的LOCAL_SRC_FILES加入:
LOCAL_SRC_FILES :=
../../Classes/XInterface.cpp \
../../Classes/js_bindings_X.cpp \
最后的结果就出来了:from javaScript
cocos2d-html5 javascript 通过C++绑定,调用java方法的更多相关文章
- Js调用Java方法并互相传参
Js通过PhoneGap调用Java方法并互相传参的. 一.JAVA代码 写一个类,该类继承自Plugin并重写execute方法. import org.json.JSONArray; import ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- C#调用Java方法(详细实例)
C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具体例子把一个JAVA方法转换成可以由C#直接调用的DLL C#调用c++ C#调用 ...
- HAL中通过JNI调用java方法【转】
转载请注明本文出处:http://www.cnblogs.com/xl19862005 作者:Xandy 由于工作的需要,最近一直在研究HAL.JNI.Java方法之间互调的问题,并做了如下一些记录和 ...
- C#调用Java方法
C#调用Java方法(详细实例) 阅读目录 C#调用c++ C#调用JAVA方法 C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具 ...
- cocos2d-x中使用JNI的调用JAVA方法
用cocos2d-x公布Android项目时.都应该知道要用JAVA与C/C++进行交互时会涉及到JNI的操作(Java Native Interface).JNI是JAVA的一个通用接口.旨在本地化 ...
- Android Studio NDK开发-JNI调用Java方法
相对于NDK来说SDK里面有更多API可以调用,有时候我们在做NDK开发的时候,需要在JNI直接Java中的方法和变量,比如callback,系统信息等.... 如何在JNI中调用Java方法呢?就需 ...
- java native interface JNI 调用Java方法
在上一篇文章中介绍了JNI.以及java调用JNI.这篇讲一下 JNI调用java方法. 通过使用合适的JNI函数,你能够创建Java对象,get.set 静态(static)和 实例(instanc ...
- Qt 调用 Java 方法笔记
Qt 调用 Java 方法笔记 假设遇到相似的错误: error: undefined reference to '_jstring* QAndroidJniObject::callStaticMet ...
- 第5篇-调用Java方法后弹出栈帧及处理返回结果
在前一篇 第4篇-JVM终于开始调用Java主类的main()方法啦 介绍了通过callq调用entry point,不过我们并没有看完generate_call_stub()函数的实现.接下来在ge ...
随机推荐
- java——简单理解线程
一·[概念] 一般来说,我们把正在计算机中运行的程序叫做"进程"(process),而不将其称为"程序"(program). 所谓"线程& ...
- 跟着辛星用PHP的反射机制来实现插件
我的博文的前一篇解说了PHP的反射机制是怎么回事,假设读者还不清楚反射机制,能够搜索下或者看我的博文,都是不错的选择.我们開始解说一下怎么用PHP来实现插件机制.所谓插件机制.就是我们定义一个接口.即 ...
- Windows 7 系统的旧版IE浏览器升级到IE11
Windows 7 系统的旧版IE浏览器升级到IE11 2016年1月12日微软全面停止对IE8.IE9.IE10浏览器的支持,不再提供安全服务,如果继续使用将会造成安全隐患,因此 Windows 7 ...
- linux host主机名配置
1.查看主机名 #hostname 2.查看ip #ifconfig 2.添加主机名配置 #vi /etc/hosts 新增一行 172.23.26.195 vhost145.idmp.safe
- java语言建立顺序表
package datastructure; //线性表 public interface IList { public void clear(); public boolean isEmpty(); ...
- numpy_basic2
# 六.numpy的常用函数 1. 读取文件 逻辑上可被解释为二维数组的文本文件: 数据项1<分隔符>数据项2<分隔符>...<分隔符>数据项n numpy.loa ...
- 终于研究出如何设置新版paypal付款时汇率损失方的问题了
http://bbs.55haitao.com/thread-1686005-1-1.html 终于研究出如何设置新版paypal付款时汇率损失方的问题了 登录paypal后,选"设置&qu ...
- spring-data-redis 使用
以前使用过Jedis,后面因项目需要使用spring-data-redis,设置一个键值及其过期时间后怎么都不对. 源代码: redisTemplate.opsForValue().set(key, ...
- vue实现一个会员卡的组件(可以动态传入图片(分出的一个组件)、背景、文字、卡号等)
自己在写这个组件的时候主要遇到的问题就是在动态传入背景图片或者背景色的时候没能立马顺利写出来,不过现在实现了这个简单组件就和大家分享一下 <template> <div class= ...
- JS实现拖拽小案例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...