ts 如何调用 c++ 层方法获得自定义的 char 数组

如题 请问:
我想在cpp中定义一个方法 然后通过jsb自动绑定 最后在js层获取这个chat数组
目前我这样写是不成功的

    char* JSBBridge::getFrame()
    {
        char buffer[3];
        buffer[0] = 1;
        buffer[1] = 2;
        buffer[2] = 3;
        return buffer;
    }

jsb2.0 自动绑定后会转换成string

static bool js_cocos2dx_test_JSBBridge_getBuffer(se::State& s)
{
    abc::JSBBridge* cobj = (abc::JSBBridge*)s.nativeThisObject();
    SE_PRECONDITION2(cobj, false, "js_cocos2dx_test_JSBBridge_getBuffer : Invalid Native Object");
    const auto& args = s.args();
    size_t argc = args.size();
    CC_UNUSED bool ok = true;
    if (argc == 0) {
        char* result = cobj->getBuffer();
        ok &= std_string_to_seval(result, &s.rval());
        SE_PRECONDITION2(ok, false, "js_cocos2dx_test_JSBBridge_getBuffer : Error processing arguments");
        return true;
    }
    SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0);
    return false;
}
SE_BIND_FUNC(js_cocos2dx_test_JSBBridge_getBuffer)

有大佬能给个例子参考一下嘛~

1、getFrame返回了一个局部变量的地址,应该编不过或者运行时有问题
2、可以查一下c++哪些类型可以转换成js层类型,全局搜std_string_to_seval,看看其他类似的函数。或者官网查
PS:可以变通一下,c++层用分隔符拼接成字符串,然后js层split还原

2赞

这个用法不对

jsb上看你是要传字符串,但也不能这么写
想想下面的问题
asc码里面1,2,3 代表的是什么?

如果要传buffer给js,那就是需要转成ArrayBuffer
也就是用 Data_to_seval

2赞

感谢回复,我的需求是传buffer给js,按照大佬的思路写后 传参成功了
例:

    cocos2d::Data JSBBridge::getBuffer()
    {
        unsigned char buffer[3];
        buffer[0] = 1;
        buffer[1] = 2;
        buffer[2] = 3;
        cocos2d::Data data;
        data.copy(buffer,3);
        return data;
    }

以下是j sb2.0 自动绑定生成的

static bool js_cocos2dx_test_JSBBridge_getBuffer(se::State& s)
{
    abc::JSBBridge* cobj = (abc::JSBBridge*)s.nativeThisObject();
    SE_PRECONDITION2(cobj, false, "js_cocos2dx_test_JSBBridge_getBuffer : Invalid Native Object");
    const auto& args = s.args();
    size_t argc = args.size();
    CC_UNUSED bool ok = true;
    if (argc == 0) {
        cocos2d::Data result = cobj->getBuffer();
        ok &= Data_to_seval(result, &s.rval());
        SE_PRECONDITION2(ok, false, "js_cocos2dx_test_JSBBridge_getBuffer : Error processing arguments");
        return true;
    }
    SE_REPORT_ERROR("wrong number of arguments: %d, was expecting %d", (int)argc, 0);
    return false;
}
SE_BIND_FUNC(js_cocos2dx_test_JSBBridge_getBuffer)

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。