您的位置:首页 > 编程语言 > C语言/C++

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

2013-08-14 19:32 423 查看
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());


本博客内容均为原创,转载请注明:http://blog.csdn.net/balitaimonk/article/details/9970147
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Cocos2d-x JSB