博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于jsb中js与c++的相互调用
阅读量:5968 次
发布时间:2019-06-19

本文共 1678 字,大约阅读时间需要 5 分钟。

1.js调用c++函数

在c++中声明函数,名为functionCpp,通过spidermonkey中jsapi
的JS_DefineFunction绑定一个js函数,名为functionJS,此函数名

可在js中直接调用,并可以传参,参数由functionCpp接收。

 

2.c++调用js函数
在js中声明函数,名为functionJS,通过spidermonkey中jsapi的
JS_CallFunctoionName(也可用JS_CallFunction,但参数不一样),

c++调用该函数,并传入参数,参数由functionJS接收。

 

以上两种方法皆可接收返回值。

 

 

示例代码:

js中

var haha = testjs("js run hahhahaha");    if (haha) {        cc.log("return from c++ :true");    } else {        cc.log("false");    }        var testfunction = function (var1) {        cc.log(var1);        var testhaha = "return from js";        return testhaha;    }

 

c++中

声明函数

JSBool testjs(JSContext *cx, uint32_t argc, jsval *vp){    if (argc > 0) {        JSString *string = NULL;        JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", &string);        if (string) {            JSStringWrapper wrapper(string);            //这块就有值了            CCLog(wrapper.get().c_str());        }    }    CCLog("js function");    return JS_TRUE;    }

 

 

调用:

CCScriptEngineProtocol *pEngine = ScriptingCore::getInstance();    CCScriptEngineManager::sharedManager()->setScriptEngine(pEngine);    ScriptingCore::getInstance()->runScript("hello.js");        JSContext *cx = sc->getGlobalContext();    JSObject *obj = sc->getGlobalObject();    JS_DefineFunction(cx, obj, "testjs", testjs, 2, JSPROP_READONLY | JSPROP_PERMANENT);                jsval var1 = c_string_to_jsval(cx, "hahhahah");    jsval rval;    JS_CallFunctionName(cx, obj, "testfunction", 1, &var1, &rval);        JSString* pS = JS_ValueToString(ScriptingCore::getInstance()->getGlobalContext(), rval);    JSStringWrapper pW(pS);    CCLog(pW.get().c_str());

 

本博客内容均为原创,转载请注明:

转载于:https://www.cnblogs.com/BalitaiMonk/p/3258379.html

你可能感兴趣的文章
linux常用小命令
查看>>
js +html+css遮罩层
查看>>
洛谷——P1102 A-B数对
查看>>
记忆模糊的知识点5-17
查看>>
浴火银河星际跳跃(并查集)
查看>>
决策树算法
查看>>
Nginx+Firebug 让浏览器告诉你负载均衡将请求分到了哪台服务器
查看>>
我的友情链接
查看>>
Python面向对象进阶及类成员
查看>>
2018年企业运维开发经典面试题
查看>>
H3C S5560交换机风扇反转告警
查看>>
解决Extjs中textarea不支持keyup事件的问题
查看>>
TCP/IP/ICMP 学习实践
查看>>
python操作redis--------------数据库增删改查
查看>>
我的友情链接
查看>>
2018.3.13 12周2次课
查看>>
我的友情链接
查看>>
基于管道模式的容器设计
查看>>
mingw msys 编译 libzip
查看>>
如何判断是否丢掉用户请求
查看>>