想知道那里是否有人取得任何成功或尝试将 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()));