• 关于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());
  • 相关阅读:
    数据库范式
    将DBF,XLS,XML,MDB文件导入C#DataGrid的方法
    在类文件中引用Server对象
    在使用了母版页的页面里加载css和js文件
    IIS 7.5 URL重写参数
    hdu Can you solve this equation?
    hdu Dome of Circus
    hdu Bone Collector
    hdu Turn the corner
    hdu 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/zhepama/p/3302733.html
Copyright © 2020-2023  润新知