zoukankan      html  css  js  c++  java
  • 关于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());
  • 相关阅读:
    Pure播放器
    WPF绑定并转换
    WPF的DataTrigger使用
    NancyFx框架之检测任务管理器
    Asp.Net MVC 5使用Identity之简单的注册和登陆
    AspNetCore使用MySQL
    Head First 设计模式之适配器模式与外观模式
    Head First 设计模式之命令模式(CommandPattern)
    Head First 设计模式之工厂模式(Factory Pattern)
    .NET设计规范————类型设计规范
  • 原文地址:https://www.cnblogs.com/zhepama/p/3302733.html
Copyright © 2011-2022 走看看