关于jsb中js与c++的相互调用

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());
上一篇:java读取UTF-8的txt文件发现开头的一个字符问题


下一篇:启用SharePoint 2013文档版本控制