Cocos2d-x使用Javascript开发js绑定C++<代码演示样例>
class IOSiAPDelegate{
public:
virtual ~IOSiAPDelegate() {}
};
class IOSAlipay{
public:
IOSAlipay();
~IOSAlipay();
void iOSProductByIdentifier(std::string &identifier,std::string amount);
IOSiAPDelegate *delegate;
};
#pragma mark-------------------------IOSAlipay的实现代理方法--------------------------------
IOSAlipay::IOSAlipay():delegate(nil){}
IOSAlipay::~IOSAlipay(){}
void
IOSAlipay::iOSProductByIdentifier(std::string &identifier,std::string amount){
NSLog(@"%s",__FUNCTION__);
//将产品id存入缓存中
CCUserDefault* config =
CCUserDefault::sharedUserDefault();//先读
config->setStringForKey ("productIdentifier" , identifier);//存入
config->flush();//刷新一下
config->setStringForKey("amount", amount);//将金额传入
}
#pragma mark-------------------------IOSAlipay的实现代理方法--------------------------------
#ifndef __iAP_JSBinding__IOSiAP_JSB__
#define __iAP_JSBinding__IOSiAP_JSB__
#include "jsapi.h"
void JSB_register_iOSAlipay(JSContext* cx,
JSObject* obj);
#endif /* defined(__iAP_JSBinding__IOSiAP_JSB__) */
#include <stdio.h>
#include "IOSAlipay.h"
#include "ScriptingCore.h"
class IOSAlipay_Bridge :
public IOSiAPDelegate
{
public:
IOSAlipay_Bridge();
~IOSAlipay_Bridge();
IOSAlipay *iap;
JSObject *jsobj;
};
IOSAlipay_Bridge::IOSAlipay_Bridge(){
iap = new
IOSAlipay();
iap->delegate =
this;
}
IOSAlipay_Bridge::~IOSAlipay_Bridge(){
delete iap;
}
static
JSClass *JSB_IOSAlipay_class =
NULL;
static
JSObject *JSB_IOSAlipay_object =
NULL;
#pragma mark-----绑定的析构函数
static
void JSB_IOSAlipay_finalize(JSFreeOp *fop,
JSObject *obj)
{
IOSAlipay_Bridge *bridge = (IOSAlipay_Bridge *)JS_GetPrivate(obj);
JS_SetPrivate(obj,
NULL);
delete bridge;
}
#pragma mark------初始化构造函数
static
JSBool JSB_IOSAlipay_constructor(JSContext *cx,
unsigned argc, JS::Value *vp)
{
) {
JSObject *jsobj =
JS_NewObject(cx,
JSB_IOSAlipay_class, JSB_IOSAlipay_object,
NULL);
IOSAlipay_Bridge *bridge =
new
IOSAlipay_Bridge();
bridge->jsobj = jsobj;
JS_SetPrivate(jsobj, (void *)bridge);
JS_SET_RVAL(cx, vp,
OBJECT_TO_JSVAL(jsobj));
return JS_TRUE;
}
JS_ReportError(cx,
"Wrong number of arguments: %d, was expecting: %d", argc,
);
return
JS_FALSE;
}
#pragma mark------ 该方法主要用于处理用于绑定到js中的方法,并接收js传递过来的參数
static
JSBool JSB_IOSiAP_iOSProductByIdentifier(JSContext *cx,
uint32_t argc, jsval *vp)
{
, cx,
JS_FALSE,
"Invalid number of arguments");
jsval *argv = JS_ARGV(cx,vp);
JSObject *obj = (JSObject *)JS_THIS_OBJECT(cx, vp);
IOSAlipay_Bridge *bridge = (IOSAlipay_Bridge *)JS_GetPrivate(obj);
// safety check for type
if (JS_FALSE ==
])) {
JS_SET_RVAL(cx, vp,
JSVAL_VOID);
return JS_TRUE;
}
JSString *jsIdentifier =
JSVAL_TO_STRING(argv[]);//获取产品ID
JSStringWrapper wrapper(jsIdentifier);
std::string identifier = wrapper.get();
JSString *jsPrice =
JSVAL_TO_STRING(argv[]);//获得价格
JSStringWrapper pWrapper(jsPrice);
std::string price = pWrapper.get();
bridge->iap->iOSProductByIdentifier(identifier,price);//传入方法參数
return
JS_TRUE;
}
#pragma mark----------------------创建处理JS绑定对象类
static
void JSB_IOSAlipay_createClass(JSContext *cx,
JSObject* globalObj,
const char* name)
{
,
sizeof(JSClass));
//
类型名称为 **IOSAlipay** 正式绑定到 js
由 js
调用的名称
JSB_IOSAlipay_class->name = name;
JSB_IOSAlipay_class->addProperty =
JS_PropertyStub;
JSB_IOSAlipay_class->delProperty =
JS_PropertyStub;//JS_DeletePropertyStub;
JSB_IOSAlipay_class->getProperty =
JS_PropertyStub;
JSB_IOSAlipay_class->setProperty =
JS_StrictPropertyStub;
JSB_IOSAlipay_class->enumerate =
JS_EnumerateStub;
JSB_IOSAlipay_class->resolve =
JS_ResolveStub;
JSB_IOSAlipay_class->convert =
JS_ConvertStub;
JSB_IOSAlipay_class->finalize =
JSB_IOSAlipay_finalize;
JSB_IOSAlipay_class->flags =
JSCLASS_HAS_PRIVATE;
// JSCLASS_HAS_PRIVATE; JSCLASS_HAS_RESERVED_SLOTS(2)
// no property for this class
static
JSPropertySpec properties[] = {
{,
, , , }
};
//
设定绑定函数。函数名 "iOSProductByIdentifier",绑定函数 "JSB_IOSiAP_iOSProductByIdentifier"
//
后面能够加入其他函数绑定,假设须要,之后以 "JS_FS_END" 结尾
// define member function
static
JSFunctionSpec funcs[] = {
JS_FN("iOSProductByIdentifier",
,
JSPROP_PERMANENT | JSPROP_ENUMERATE),
JS_FS_END
};
//
这里定义而且绑定了静态函数(static),包含方法名 "create"和相应的绑定实现
static
JSFunctionSpec st_funcs[] = {
JS_FS_END
};
JSB_IOSAlipay_object =
JS_InitClass(
cx,globalObj,
NULL,
JSB_IOSAlipay_class,
,//这里绑定的是构造函数的实现。也就是用js-new操作符创建的对象
properties,
funcs,//
函数绑定
NULL,// no static properties
st_funcs);//
静态函数绑定
}
#pragma mark ----注冊绑定方法
让JS 可以找到
全部类
/**
* 该方法主要在
本程序中的 GameEnter.cpp中进行集体绑定
* sc->addRegisterCallback(JSB_register_iOSiAP);
*
* @param cx
上下文
* @param obj
对象
* @return
返回值
*/
// extern init function
void JSB_register_iOSAlipay(JSContext* cx,
JSObject* obj)
{
// define name space
JSObject *myBinding =
JS_NewObject(cx, NULL,
NULL, NULL);
js::RootedValue myBindingVal(cx);
myBindingVal =
OBJECT_TO_JSVAL(myBinding);
JS_SetProperty(cx, obj,
"MyBinding", (jsval *)&myBindingVal);
// register class
JSB_IOSAlipay_createClass(cx, myBinding,
"IOSAlipay");
}
Cocos2d-x使用Javascript开发js绑定C++<代码演示样例>的更多相关文章
- 【甘道夫】Eclipse+Maven搭建HBase开发环境及HBaseDAO代码演示样例
环境: Win764bit Eclipse Version: Kepler Service Release 1 java version "1.7.0_40" 第一步:Eclips ...
- SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)
做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...
- 移动端报表JS开发演示样例
近期对移动端的报表开发颇有研究,细磨精算了好久,尽管到如今还是"囊中羞涩",但决定还是先抛砖引玉,拿点小干货出来和大家分享. 研究的工具是比較有代表性的FineReport. 1. ...
- SNF开发平台WinForm-审核流使用方法样例
一.效果如下: 二.如何实现 1.程序的数据表设计规范,参考<09.SNF-C#编程规范V1.5.docx>文件. 2.程序操作程序 2.1.在程序页面拖拽控件 2.2.程序的Load事件 ...
- AppCan移动应用开发平台新增9个超有用插件(内含演示样例代码)
使用AppCan平台进行移动开发.你所须要具备的是Html5+CSS +JS前端语言基础.此外.Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发人员,怎样实现App里 ...
- JavaScript 中对变量和函数声明提前的演示样例
如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...
- 构造Scala开发环境并创建ApiDemos演示样例项目
从2011年開始写Android ApiDemos 以来.Android的版本号也更新了非常多,眼下的版本号已经是4.04. ApiDemos中的样例也添加了不少,有必要更新Android ApiDe ...
- 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例
第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...
- 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...
随机推荐
- shell项目-分发系统-构建文件分发系统
shell项目-分发系统-构建文件分发系统 需求背景对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台.所以,自动同步文件是至关重要的. 实 ...
- 洛谷 P1881 绳子对折
P1881 绳子对折 题目描述 FJ 有一个长度为L(1<= L <= 10,000)的绳子. 这个绳子上有N(1 <= N <= 100)个结,包括两个端点. FJ想将绳子对 ...
- Linux下进程终止过程
不管是在什么系统中,当进程终止之后.系统都须要释放进程占有的资源. 否则.系统资源会被耗尽. 以下将具体说明Linux系统中,进程终止的过程. 进程终止方式 linux的进程终止方式有8种,当中5种是 ...
- 【MySQL】常见错误与经常使用命令的集锦
[背景介绍] 在使用SQL Server数据库期间,想必大家一定都有过解决各种问题的经历了.非常多时候,都会在大家的博客中看到问题与解决方式. 如今开发使用的是MySQL数据库.如今来看,发现 ...
- Swift具体解释之三----------函数(你想知道的都在这里)
函数(你想知道的都在这里) 注:本文为作者自己总结.过于基础的就不再赘述 ,都是亲自測试的结果.如有错误或者遗漏的地方.欢迎指正.一起学习. 1. 函数的简单定义和调用 简单的无參函数就不再赘述 , ...
- Log4j日志管理的简单实例
大型项目中非常多情况下要分析程序的日志信息,怎样管理自己的日志信息至关重要. 在应用程序中加入日志记录总的来说基于三个目的 , 监视代码中变量的变化情况,周期性的记录到文件里供其它应用进行统计分析工作 ...
- softInputMode- 软件盘监听事件
软件盘的监听事件,如下 private final OnKeyListener mSubjectKeyListener = new OnKeyListener() { @Override public ...
- Ajax跨域:Jsonp实例--百度搜索框下拉提示
Ajax跨域:Jsonp实例--百度搜索框下拉提示 一.总结 一句话总结:a.找好接口:b.用script标签的src引入文件(json数据):c.定义及实现上一步引入文件中的函数 1.如何找到一个网 ...
- 8 Great Java 8 Features No One's Talking about--转载
原文地址:http://www.infoq.com/articles/Java-8-Quiet-Features If you haven’t seen some of the videos or t ...
- android hander
http://www.cnblogs.com/plokmju/p/android_Handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决And ...