1

想知道那里是否有人取得任何成功或尝试将 flatbuffers 与 duktape 集成,到目前为止,我只能获得大约 1/2 的方式......

我可以从 C 推送一个 flatbuffer,并使用以下代码从 JS 访问它,它似乎工作得很好:

duk_push_heapptr(ctx, t->ptr);
duk_push_external_buffer(ctx);
duk_config_buffer(ctx, -1, d.data, d.length);
duk_call(ctx, 1);

但是,我似乎无法将 flatbuffer 从 JS 传递到 C(或在我的情况下为 C++)取得同样的成功:

void * buff;
duk_size_t sz;
buff = duk_require_buffer_data(ctx, 1, &sz);
if (VerifyLogEventBuffer(flatbuffers::Verifier((uint8_t *)buff, (unsigned int)sz))) {
    std::cout << "Buffer is good here!" << std::endl;
} else {
std::cout << "Buffer is broken here even" << std::endl;
}

有什么想法我可能在这里做错了吗?编译没有问题,但 flatbuffer 不可读。

编辑:我还应该包括相关的 JS——

        var fbb = new flatbuffers.Builder(1024);

    PGS.Buffers.LogEvent.startLogEvent(fbb);
    PGS.Buffers.LogEvent.addLevel(fbb,'WARN');
    PGS.Buffers.LogEvent.addSource(fbb,"js");
    PGS.Buffers.LogEvent.addText(fbb,"1 Event Emitted from JS now with a very long text string to make sure our buffer size increases.");
    var toEmit = PGS.Buffers.LogEvent.endLogEvent(fbb);
    PGS.Buffers.LogEvent.finishLogEventBuffer(fbb, toEmit);

   // var b = new Buffer(fbb.asUint8Array());
    print("1 Attempting to raise long log event using dataBuffer and Buffer");
    raise('log', new Buffer(fbb.asUint8Array()));
4

0 回答 0