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 ...
随机推荐
- Codeforces Round #316 (Div. 2) A B C
A. Elections time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- 3. CONFIGURATION官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ 3. CONFIGURATION 3.1 Broker Configs 3.2 Pr ...
- Elasticsearch之es学习工作中遇到的坑(陆续更新)
1:es集群脑裂问题(不要用外网ip,节点角色不要混用) 原因1:阿里云服务器,外网有时候不稳定. 解决方案:单独采购服务器,内网安装 原因2:master和node节点没有分开 解决方案: 分角色: ...
- CISP/CISA 每日一题 16
CISA 每日一题(答) 作业调度软件的优点: 1.作业信息仅需建立一次,减少错误发生概率: 2.可定义作业间的依赖关系,当某一项作业失败时,依赖于该作业的后续作业就不会被执行: 3.所有成功或失败的 ...
- eclipse4.3怎么集成jadclipse追踪源代码,现在windows-preferences-java
A.将net.sf.jadclipse_3.2.4.jar复制到D:\leaf\eclipse\plugins目录下. B.在d:\leaf下建立ecliplsePlungin\jadclips ...
- Moodle 中文 API 之 文件管理API
File API 文件管理 文件夹 1. 概述 2. 文件域 2.1 命名文件域 3. 提供文件给用户 4. 从用户那获取文件 5. 样例 5.1 浏览文件 5.2 移动文件 5.3 文件列表 5. ...
- 右键菜单→新建→BAT 批处理文件
目的:以前编写BAT,通常新建一个文本,然后另存为 .bat,比较麻烦,那么如何右键新建菜单里添加新建批处理文件呢? 代码如下: @echo offcd /d %temp%echo Windows R ...
- JQuery 当点击input后,单选多选的选中状态
1.当点击input元素,此元素的选中checked的值 = 此元素此时表现的选中与否的状态. eg:input元素开始是未选中,点击后表现的是选中状态,此元素的checked为true(和此元素开始 ...
- 关于程序中delay函数带来的繁琐问题
导致“滴滴”声音不准确的原因是因为,串口屏幕发送信息的时候会有delay() 的延迟. 得到的教训就是,无论在什么地方,最好都不要加delay的延迟.否则含有delay的子 函数加入到其他模块中,就会 ...
- VUE笔记 - 插值表达式 v-on: / @ 事件绑定 定时器运用
<body> <!-- 2. 创建一个要控制的区域 --> <div id="app"> <input type="button ...