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 ...
随机推荐
- windows删除多余启动引导项
方法1: 按快捷键win+r,打开运行界面,输入msconfig. 点击确定,进入系统配置,选择引导选项卡,如图: 选中你不需要的启动项,点击下面的删除按钮即可.删除完成之后点击确定,重启计算机就可以 ...
- bitset也挺好用的
http://www.cplusplus.com/reference/bitset/bitset/bitset/ std::bitset<16> foo; std::bitset<4 ...
- C#截取指定长度中英文字符串方法 (修改)
public static string GetFirstString(string stringToSub, int length) { Regex regex = new Regex(" ...
- vim学习2
进入插入模式: 在插入模式下删除: 寄存器
- 【AIM Tech Round 4 (Div. 1) B】Interactive LowerBound
[链接]http://codeforces.com/contest/843/problem/B [题意] 给你一个数组模拟的单链表,放在一个长度为n的数组里面,然后告诉你表头的位置在哪里; 你可以最多 ...
- Qt之模型/视图(自己定义button)
简述 衍伸前面的章节,我们对QTableView实现了数据显示.自己定义排序.显示复选框.进度条等功能的实现.本节主要针对自己定义button进行解说.这节过后,也希望大家对自己定义有更深入的了解.在 ...
- leetCode解题报告5道题(十)
题目一:Valid Number Validate if a given string is numeric. Some examples: "0" => true &quo ...
- 97.TCP通信
运行截图: 客户端 创建通信套接字 //通信套接字,用于创建TCP连接 SOCKET socket_send; 创建tcp通信 //创建tcp通信 socket_send = socket(AF_IN ...
- Android Notification.setLatestEventInfo弃用和Notification.Builder用法
今天在学习小米便签的源码的时候,至于源码的地址,http://m.blog.csdn.net/article/details?id=50544248 ,里面有好多github的开源项目,打开项目,报错 ...
- Cscope how to support java and c++
Cscope 首先在文件夹下建立cscope索引文件 find -name '*.c' > cscope.file cscope -Rbkq 这个命令会生成三个文件:cscope.out, cs ...