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++&lt;代码演示样例&gt;的更多相关文章

  1. 【甘道夫】Eclipse+Maven搭建HBase开发环境及HBaseDAO代码演示样例

    环境: Win764bit Eclipse Version: Kepler Service Release 1 java version "1.7.0_40" 第一步:Eclips ...

  2. SNF快速开发平台MVC-各种级联绑定方式,演示样例程序(包含表单和表格控件)

    做了这么多项目,经常会使用到级联.联动的情况. 如:省.市.县.区.一级分类.二级分类.三级分类.仓库.货位. 方式:有表单需要做级联的,还是表格行上需要做级联操作的. 实现:实现方法也有很多种方式. ...

  3. 移动端报表JS开发演示样例

    近期对移动端的报表开发颇有研究,细磨精算了好久,尽管到如今还是"囊中羞涩",但决定还是先抛砖引玉,拿点小干货出来和大家分享. 研究的工具是比較有代表性的FineReport. 1. ...

  4. SNF开发平台WinForm-审核流使用方法样例

    一.效果如下: 二.如何实现 1.程序的数据表设计规范,参考<09.SNF-C#编程规范V1.5.docx>文件. 2.程序操作程序 2.1.在程序页面拖拽控件 2.2.程序的Load事件 ...

  5. AppCan移动应用开发平台新增9个超有用插件(内含演示样例代码)

    使用AppCan平台进行移动开发.你所须要具备的是Html5+CSS +JS前端语言基础.此外.Hybrid混合模式应用还需结合原生语言对功能模块进行封装,对于没有原生基础的开发人员,怎样实现App里 ...

  6. JavaScript 中对变量和函数声明提前的演示样例

    如题所看到的,看以下的演示样例(能够使用Chrome浏览器,然后F12/或者右键,审查元素.调出开发人员工具,进入控制台console输入)(使用技巧: 控制台输入时Shift+Enter能够中途代码 ...

  7. 构造Scala开发环境并创建ApiDemos演示样例项目

    从2011年開始写Android ApiDemos 以来.Android的版本号也更新了非常多,眼下的版本号已经是4.04. ApiDemos中的样例也添加了不少,有必要更新Android ApiDe ...

  8. 让你提前认识软件开发(19):C语言中的协议及单元測试演示样例

    第1部分 又一次认识C语言 C语言中的协议及单元測试演示样例 [文章摘要] 在实际的软件开发项目中.常常要实现多个模块之间的通信.这就须要大家约定好相互之间的通信协议,各自依照协议来收发和解析消息. ...

  9. 【COCOS2D-HTML5 开发之三】演示样例项目附源代码及执行的GIF效果图

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/cocos2d- ...

随机推荐

  1. Vue移动端flexible.js+MuseUi

    因为公司有个项目需求,手机端的.之前就写了一个一样的项目,只不过是用原生的写的,心想刚写了个vue后台管理系统,何不也用vue写,所有就没有把之前的利用过来.那么问题来了,要让手机端自适应我们该怎么做 ...

  2. 【DRF认证】

    目录 认证组件的详细用法 本文详细讲述了DRF认证组件的原理以及用法. @ * 源码剖析** 上一篇博客讲解DRF版本的时候我们都知道了,在dispatch方法里执行了initial方法来初始化我们的 ...

  3. 【hihocoder 1122】二分图二•二分图最大匹配之匈牙利算法

    [Link]:https://hihocoder.com/problemset/problem/1122 [Description] [Solution] 二分图匹配,匈牙利算法模板题; 这里我先把染 ...

  4. 点击事件-click,longclick

    今天在修改一个问题的时候,遇到了click,longclick事件触发情况.记录下来. 代码 tView.setOnLongClickListener(new OnLongClickListener( ...

  5. Java Base64、HMAC、SHA1、MD5、AES DES 3DES加密算法

    ●  BASE64 严格地说,属于编码格式,而非加密算法    ●  MD5(Message Digest algorithm 5,信息摘要算法)    ●  SHA(Secure Hash Algo ...

  6. Maven用法

    Maven 的使用教程   1.什么是 Maven? Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具.   2.下载 Maven? ①.官网下载 ...

  7. 【例题 8-10 UVA - 714】 Copying Books

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分最后的最大值的最小值. 得到ans 然后从后往前尽量划分. 如果发现不够分成k个. 那么就从第一个开始接着分restk个(每隔1 ...

  8. 【Unity3D自学记录】鼠标移动三维物体

    创建一个脚本.例如以下: using UnityEngine; using System.Collections; public class OnMouse : MonoBehaviour { IEn ...

  9. javaScript实现选中文字提示新浪微博分享的效果

    <!DOCTYPE html> <html xmlns:wb="http://open.weibo.com/wb"> <head> <me ...

  10. setInterval()第一个参数带引号和不带引号的区别

    setInterval()第一个参数带引号和不带引号的区别:关于定时函数setInterval()的基本用法这里就不做介绍了,查阅相关教程即可,这里主要介绍一下setInterval()函数的第一个参 ...