C++调用js 方法封装

//ScriptingCore.h 中添加

//JS::HandleObject getGlobalHandle() { return _global.ref(); }
void CallJSFuncName(string jsname, string jsmethod, int count, ...) {
    ScriptingCore* sc = ScriptingCore::getInstance();
    JSContext* cx = sc->getGlobalContext();
    JS::RootedValue nsval(cx);

    if (JS_GetProperty(cx, sc->getGlobalHandle(), jsname.c_str(), &nsval)) {
        int argc = count;
        jsval* argv = new jsval[argc];;

        va_list insvalist;
        va_start(insvalist, count);
        for (int i = 0; i < count; ++i)
        {
            argv[i] = std_string_to_jsval(sc->getGlobalContext(), std::string(va_arg(insvalist, const char *)));
        }
        va_end(insvalist);

        sc->executeFunctionWithOwner(nsval, jsmethod.c_str(), argc, argv);
        delete[] argv;
    }
}

//使用
//CallJSFuncName(对象名, 方法名, 参数个数, …);

CallJSFuncName("Socket", "onMessage", 1, 参数1);

//js部分

var Socket = {};
Socket.onMessage = function (data) {
    cc.log("this is c++ call js");
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值